次の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>
ご覧のとおり、フォームは送信され、期待される出力は、値が入力された1つの配列と、値が「Go」(ボタン)のエントリ「action」を含むPOST配列です。ただし、フィールドに入力する値に関係なく、結果は常に:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
どういうわけか、testという名前の配列は空になり、 "action"変数がそれを通過します。
FirefoxのLive HTTP Headers拡張機能を使用して、POSTフィールドが送信されるかどうかを確認しました。ライブ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ボックス、PHPバージョン5.2.4(Suhosinを使用)のUbuntuサーバーでこれを試しましたが、機能しません。また、Ubuntuと同じPHPバージョン、Suhosinがインストールされている別のサーバーでも動作します。
2つのファイルを比較しました。これは出力(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は現在のものです。ここには問題がないように見えますよね?