phpのアップロードで必ずチェックする設定値 (php.ini , httpd.conf)

phpでアップロードする際に気をつけるべき項目があります。
現在の設定値は下記コードで取得できます。

<?php
echo 'memory_limit = ' . ini_get('memory_limit') . "<br />";
echo 'post_max_size = ' . ini_get('post_max_size') . "<br />";
echo 'upload_max_filesize = ' . ini_get('upload_max_filesize') . "<br />";
echo 'max_execution_time = ' . ini_get('max_execution_time') . "<br />";
echo 'max_input_time = ' . ini_get('max_input_time') . "<br />";
?>

php.ini の設定

ファイルサイズの設定について

大きいファイルサイズのアップロードをする場合、必ず設定がいる項目です。

memory_limit = 500M
post_max_size = 400M
upload_max_filesize = 300M

基本的に下記の範囲の値にするので間違いないのですが、マニュアルでは、memory_limitに”一般的に”という条件がつきます。

memory_limit >= post_max_size >= upload_max_filesize

post_max_size >= upload_max_filesizeは絶対です。
ファイルのアップロードという行為がpost値に内包されるので。

memory_limitは必ずしも他の値よりも大きくなければならないということはありません。
memory_limitが他の値よりも小さい場合、それより大きサイズのファイルの処理速度が遅くなるなど弊害がありますが、空きメモリー状況によって調節してもよいです。
大きいサイズのファイルは、通常回線速度やHDD(またはSSD)のアクセス速度のほうがボトルネックになるはずです。
ただし、余りにも小さいmemory_limitは急激なレスポンス低下になります。
テストしながら適正な値に調整します。

実行時間の設定について

max_execution_time = 120

忘れがちですがPHPスクリプトの実行時間の変更も必要です。
大きいファイルサイズの場合、[ move_uploaded_file() ]などの実行時間でタイムアウトする可能性があります。
実行時間はHDD(SSD)のアクセス速度に影響されます。

php.iniで設定すると全てのファイルに影響がでますので、特定のファイル( upload.php など)だけ設定するなら下記のコードで設定できます。
ただし、レンタルサーバーなどではこのコードを書いても設定できないことがあります。

<?php
set_time_limit(120);
?>

実行時間の設定について (念のため)

max_input_time = 60

ユーザーがアップロードにかかる時間と勘違いすることが多いですが、マニュアルによると「すべてのデータを受け取ってから~」なので関係ありません。
ディフォルトのままでネックになることは、余程混んでいないと少ないと思いますが、念のためこういう設定項目があるということを覚えておく。

Apacheの設定 httpd.conf

LimitRequestBody 0

ディフォルトで無制限に設定されているが、サーバーによっては制限されている場合があります。
32ビットのapacheでは基本2GBが最大サイズ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です