Tôi có trang HTML / PHP sau:
<?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>
Như bạn có thể thấy, biểu mẫu sẽ gửi và đầu ra dự kiến là một mảng POST với một mảng trong đó chứa các giá trị được điền và một mục "hành động" với giá trị "Go" (nút). Tuy nhiên, bất kể giá trị nào tôi nhập vào các trường; kết quả luôn là:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
Bằng cách nào đó, mảng có tên là test được làm trống, biến "hành động" thực hiện được.
Tôi đã sử dụng tiện ích mở rộng Live HTTP Headers cho Firefox để kiểm tra xem các trường POST có được gửi hay không và chúng có hoạt động không. Thông tin liên quan từ Tiêu đề HTTP Trực tiếp (với a, b và c được điền dưới dạng giá trị trong hộp văn bản):
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
test%5B1%5D=a&test%5B2%5D=b&test%5B3%5D=c&action=Go
Có ai có bất kỳ ý tưởng như tại sao điều này đang xảy ra? Tôi đang bối rối về điều này, nó đã làm tôi mất rất nhiều thời gian rồi ...
Cập nhật:
Chúng tôi đã thử điều này trên các máy chủ khác nhau, trên các hộp Windows nó hoạt động, trên máy chủ Ubuntu có phiên bản PHP 5.2.4 (với Suhosin), thì không. Nó thậm chí hoạt động trên một máy chủ khác, cũng với Ubuntu và cùng phiên bản PHP, cũng được cài đặt Suhosin.
Tôi đã khác hai tệp, đây là đầu ra ( 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
>
Trong phps.ini này là một từ máy chủ mà nó hoạt động và php.ini là máy chủ hiện tại. Hình như không có vấn đề gì ở đây, phải không?