大量のデータをリクエストで送ってみる

( PHP )

今の時代、複数枚の画像を一気に一つのリクエストで送るのありないけどときにやらないときもあるの。 でも単純にできなかったので調査。

以下、はてなをパクリつつチェックしてみた。

■<form method=post> で渡すデータ量に制限はない ・HTTPヘッダの ContentsLength は 0 以上なら全て有効

■Apache側で受け取るコンテンツの長さの設定ができる LimitRequestBody ディレクティブ(デフォルトは無制限)

■PHP側での制限 変数の容量限界は設定された使用メモリ量に依存 デフォルトでは8Mの設定になっていると思います。 php.ini の、 memory_limit を参照してみてください

■大量データを受け取る際のタイムアウトがあり得る あまり大きいとアップロード中にPHPがタイムアウトするかも。 php.ini の max_execution_time を長めに取る等対策要?

自分のところは「Content-Length」のサイズを予め設定しておく必要あるのかな。

と思ってZendで以下の設定をすることにした。

phpSettings.default_charset            = "UTF-8"
phpSettings.default_mimetype           = "text/html"
phpSettings.memory_limit               = -1
phpSettings.post_max_size              = 20971520
phpSettings.upload_max_filesize        = 20971520

一応サイズは都合上20Mぐらいにしたのだが

エラ-で8M以上は遅れないよっていうレスポンスを返してきやがったぜ。

php.iniで変更しないとだめなのか、そもそもそんな設定がphp.iniになるのか

よくわかめ

<追記> とおもったら単純ミスーーーーーー

「post_max_size」「upload_max_filesize」はphp.iniで設定しないと反映されないんだった!!!!

PHP:実行時設定

# application.ini
phpSettings.default_charset            = "UTF-8"
phpSettings.default_mimetype           = "text/html"
phpSettings.memory_limit               = -1
;消さなきゃ
;phpSettings.post_max_size              = 20971520
;phpSettings.upload_max_filesize        = 20971520
# php.ini
post_max_size = 20M
; 下記は一応
upload_max_filesize = 2M
max_file_uploads = 20

教訓

「変更の可否」部分を要確認 PHP_INI_USER ユーザスクリプトまたはWindowsレジストリ で設定可能なエントリ PHP_INI_PERDIR php.ini, .htaccess または httpd.confで設定可能なエントリ PHP_INI_SYSTEM php.ini または httpd.confで設定可能なエントリ PHP_INI_ALL どこでも設定可能なエントリ