ฉันมีหน้า HTML / PHP ต่อไปนี้:
<?php
if(empty($_SERVER['CONTENT_TYPE'])) {
$type = "application/x-www-form-urlencoded";
$_SERVER['CONTENT_TYPE'] = $type;
}
echo "<pre>";
var_dump($_POST);
var_dump(file_get_contents("php://input"));
echo "</pre>";
?>
<form method="post" action="test.php">
<input type="text" name="test[1]" />
<input type="text" name="test[2]" />
<input type="text" name="test[3]" />
<input type="submit" name="action" value="Go" />
</form>
ดังที่คุณเห็นฟอร์มจะส่งและเอาต์พุตที่คาดหวังคือ POST array ที่มีหนึ่งอาร์เรย์ในนั้นซึ่งมีค่าที่กรอกและหนึ่งรายการ "action" พร้อมค่า "Go" (ปุ่ม) อย่างไรก็ตามไม่ว่าฉันจะป้อนค่าใดในฟิลด์ ผลลัพธ์มักจะ:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
ยังไงก็ตาม, อาร์เรย์ชื่อการทดสอบจะถูกลบ, ตัวแปร "การกระทำ" จะทำให้มันผ่าน
ฉันใช้ส่วนขยาย Live HTTP Headers สำหรับ Firefox เพื่อตรวจสอบว่ามีการส่งฟิลด์ POST หรือไม่และทำได้ ข้อมูลที่เกี่ยวข้องจาก Live HTTP Headers (ด้วย a, b และ c เป็นค่าในกล่องข้อความ):
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
test%5B1%5D=a&test%5B2%5D=b&test%5B3%5D=c&action=Go
ใครบ้างมีความคิดว่าทำไมสิ่งนี้เกิดขึ้น? ฉันประหลาดกับสิ่งนี้มันมีค่าฉันเสียเวลามากแล้ว ...
ปรับปรุง:
เราได้ลองทำสิ่งนี้กับเซิร์ฟเวอร์ที่แตกต่างกันในกล่อง Windows ที่ใช้งานได้บนเซิร์ฟเวอร์ Ubuntu ที่มี PHP เวอร์ชัน 5.2.4 (พร้อม Suhosin) แต่ก็ไม่ได้ มันทำงานได้บนเซิร์ฟเวอร์ที่แตกต่างกันเช่นเดียวกับ Ubuntu และรุ่น PHP เดียวกันพร้อมติดตั้ง Suhosin
ฉันได้แบ่งไฟล์สองไฟล์นี่คือผลลัพธ์ ( diff php.ini phps.ini
):
270c270
< memory_limit = 32M
---
> memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
415c415
< variables_order = "EGCSP"
---
> variables_order = "EGPCS"
491d490
< include_path = ".:"
1253a1253,1254
> extension=mcrypt.so
>
ใน phps.ini นี้มาจากเซิร์ฟเวอร์ที่ใช้งานได้และ php.ini เป็นเซิร์ฟเวอร์ปัจจุบัน ดูราวกับว่าไม่มีปัญหาที่นี่ใช่ไหม?