У мене є така 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(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
Так чи інакше, масив з ім'ям тесту випорожнюється, змінна "action" робить це до кінця.
Я використовував розширення заголовків HTTP Live для 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 - поточний. Схоже, тут проблем немає, правда?