Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Beberapa Nilai $_POST Hilang Apabila Hadir dalam php://input?

Mengapa Beberapa Nilai $_POST Hilang Apabila Hadir dalam php://input?

DDD
Lepaskan: 2024-10-29 07:01:02
asal
574 orang telah melayarinya

Why Are Some $_POST Values Missing When Present in php://input?

Nilai PHP $_POST Hilang Apabila Hadir dalam php://input

Apabila menyerahkan borang HTML yang besar melalui POST, beberapa nilai $_POST mungkin tiada dalam PHP. Ini berlaku walaupun nilai terdapat dalam kandungan permintaan mentah yang boleh diakses melalui php://input.

Isu ini timbul kerana PHP mengubah suai aksara tertentu, seperti ruang dan titik, dalam nama medan untuk mematuhi register_globals yang tidak digunakan lagi. tetapan. Akibatnya, beberapa kunci mungkin diubah dan tidak terdapat dalam $_POST.

Untuk menyelesaikan isu ini, pertimbangkan penyelesaian berikut:

Penyelesaian

  1. Fungsi Tersuai: Cipta fungsi untuk menghuraikan php://input dan bina semula tatasusunan $_POST yang betul, mengambil kira nama medan yang diubah suai.
<code class="php">function getRealPOST() {
    $pairs = explode("&amp;", file_get_contents("php://input"));
    $vars = array();
    foreach ($pairs as $pair) {
        $nv = explode("=", $pair);
        $name = urldecode($nv[0]);
        $value = urldecode($nv[1]);
        $vars[$name] = $value;
    }
    return $vars;
}</code>
Salin selepas log masuk
  1. Lumpuhkan register_globals: Tetapkan register_globals kepada "Mati" dalam konfigurasi PHP anda untuk mengelakkan pengubahsuaian nama medan. Walau bagaimanapun, ini tidak disyorkan kerana register_globals adalah risiko keselamatan.
  2. Nama Medan Pengekodan URL: Kodkan nama medan dalam borang HTML anda menggunakan urlencode() untuk menghalang aksara khas daripada diubah suai.

Sebagai contoh, serpihan HTML:

<code class="html"><input type="text" name="my_field.value" value="test"></code>
Salin selepas log masuk

Kod PHP:

<code class="php">$my_field_value = $_POST['my_field.value'];</code>
Salin selepas log masuk
  1. Gunakan Kaedah Alternatif untuk Borang Besar: Pertimbangkan untuk menggunakan kaedah alternatif, seperti data berbilang bahagian/bentuk, yang lebih sesuai untuk mengendalikan borang besar dan mengekalkan nama medan.

Atas ialah kandungan terperinci Mengapa Beberapa Nilai $_POST Hilang Apabila Hadir dalam php://input?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan