У меня есть следующая страница 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 с одним массивом в нем, содержащим заполненные значения и одной записью «action» со значением «Go» (кнопка). Однако независимо от того, какие значения я ввожу в поля; результат всегда:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
Каким-то образом массив с именем test очищается, переменная "action" справляется с этим.
Я использовал расширение Live HTTP Headers для Firefox, чтобы проверить, отправляются ли поля POST, и они это делают. Соответствующая информация из заголовков Live HTTP (с заполнением 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 - текущий. Похоже, здесь нет проблем, верно?