HTML のフォームから POST したデータが、受け側の PHP スクリプトで正常に取得できないことがあります。
フォームから画像を送信しようとして、正常に動作しなかったのが不具合(バグ?)を発見したきっかけでした。
環境
CentOS 7.1
Apache 2.4.6 (RPM インストール)
PHP 5.6.12 (ソースインストール)
memory_limit
post_max_size
upload_max_filesize
これらの値は、上から 128MB、100MB、50MB に設定し、
Apache の LimitRequestBody は設定していません(= デフォルトの無制限が適用)。
上記環境下で、アップロード用スクリプトのテストを 800KB の画像で行ったところ、
$_FILES['hoge']['error'] に UPLOAD_ERR_PARTIAL が返ってきました。
そこで色々試してみると 8KB 弱程度のファイルなら正常にアップロードできるようです。
もっとも、これでは実用に耐えませんので、原因追究の為色々と試してたみた結果、
ファイルの有無にかかわらず、フォームの内容が 8KB を超えるあたりで
POST した内容が正常に取得できないことが判明しました。
ここの動作が面白く(ぉぃ)、リロードをかける度に値が変化します(変化しない場合もあります)。
変化というか、正常なサイズが取れていない感じです。
送信データを hogehogehogehoge(以下 8KB 分並べる)とすると、ある時は
hogehogehogeh
だったり、またある時は
hogehog
だったりというイメージです。
但し、$_SERVER['CONTENT_LENGTH'] は POST したサイズが正常に入っています。
なお、上記スクリプトを別のサーバで走らせてみたところ、動作はいたって正常でした。
また、同様の内容を perl で記述した場合も正常でした(画像もアップロード可能)。
こういった現象に遭遇した方、いらっしゃいますでしょうか?
また、いらっしゃいましたらどのように対処されましたか?
[2015/09/18 追記]
質問のあった php.ini の当該個所のコピーです。
post_max_size = 100M
upload_max_filesize = 80M
memory_limit = 128M
なお、上記記述のある php.ini(動作が異常なサーバの方の設定ファイル)を、
正常に動作しているサーバに適用して走らせてみましたが、
全く問題なく動作しました。
(php.ini 適用後テスト → 問題なし。念の為 httpd.conf もコピーして適用後テスト → 問題なし)
一体どこに原因があるんでしょうねぇ……。
回答1件
あなたの回答
tips
プレビュー