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
534 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!

sumber:php.cn
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