Pembolehubah POST PHP Hilang Walaupun Kehadiran dalam php://input
Pengenalan:
Semasa memproses penyerahan borang dalam PHP melalui permintaan POST, ada kemungkinan untuk menghadapi gelagat pelik apabila nilai tertentu tidak terdapat dalam superglobal $_POST walaupun ia hadir dalam permintaan mentah melalui php://input.
Penerangan Masalah:
Isu timbul apabila menyerahkan borang HTML yang besar dengan medan bersarang. Walaupun data borang dihantar ke pelayan, beberapa nilai mungkin gagal diisi dalam $_POST. Pemeriksaan php://input mendedahkan bahawa nilai ini sememangnya disertakan dalam permintaan tetapi nampaknya dipenggal dalam $_POST.
Punca:
Tingkah laku itu dikaitkan kepada pengubahsuaian PHP bagi medan POST yang mengandungi aksara seperti titik, ruang, kurungan segi empat sama terbuka, dsb. Aksara ini sebelum ini diproses oleh konfigurasi register_globals yang telah ditamatkan.
Penyelesaian:
Untuk menangani isu ini, anda boleh menggunakan penyelesaian seperti berikut:
<code class="php">// Get real POST variables function getRealPOST() { $pairs = explode("&", 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>
Fungsi ini menghuraikan permintaan POST mentah dalam php://input dan membina semula pembolehubah POST dengan nama medan asal, mengambil kira penggantian aksara dibuat oleh PHP.
Atas ialah kandungan terperinci Mengapa pembolehubah PHP POST hilang dari $_POST walaupun terdapat dalam php://input?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!