こんにちは、PHPの初心者です。非常に大きなcsvファイルをサーバーにアップロードするためのフォームを作成しました。アップロードするファイルが大きいためにブラウザがタイムアウトする可能性があると私に言った人がいますが、これは本当ですか?もしそうなら、それを防ぐことができますか?
ご協力いただきありがとうございます!
値が小さすぎる場合、大規模なアップロードが失敗する可能性のあるいくつかの構成ディレクティブがあります。
PHP
max_input_time
POST、GET、ファイルアップロードなど、入力データをスクリプトが解析できる最大時間(秒)upload_max_filesize
アップロードされたファイルの最大サイズ。post_max_size
許可される投稿データの最大サイズ。アパッチ
TimeOut
リクエストに失敗する前にサーバーが特定のイベントを待機する時間LimitRequestBody
クライアントから送信されるHTTPリクエストボディの合計サイズを制限しますおそらくこれ以上のものがあります。
PHPでの大きなファイルアップロードの不適切な処理を回避する良い方法は、送信する前にファイルをチャンクに分割する JUpload のようなアップローダーを使用することです。これには、アップロード中に適切な進捗フィードバックが得られ、一度に複数のファイルをアップロードできるという利点もあります。
非常に大きなファイルをアップロードする場合、4つの構成変数を変更する必要があります。
upload_max_filesize
post_max_size
memory_limit
time_limit
Set_time_limit()を使用すると、実行時に制限時間を延長できます。
デフォルトでは、スクリプトは30秒程度実行できます。 set_time_limit()function を使用してこれを変更できます。また、ユーザーが大きなファイルをアップロードする必要がある場合は、php.iniファイルのpost_max_sizeやupload_max_filesizeの値を変更する必要があります。
また、タイムアウト制限をグローバルに延長したい場合は、php.iniでmax-execution-timeを変更できます。
私は次の設定を使用してこの問題を解決できました。異なる値を使用できますが、アイデアは得られます:
私のサーバーでは、これらの行をスクリプトディレクトリ内の「.user.ini」ファイルに入れます。サーバーでphpinfo( 'user_ini.filename')を実行すると、サーバーは別のファイルを探す場合があります。値を入れるために必要なファイル
max_execution_time = 1800
max_input_time = -1
post_max_size = 100M
upload_max_filesize = 100M
memory_limit = 256M
はい、そうです。ファイルのアップロードはPOSTリクエストを介して行われ、リクエストは一般にタイムアウトの対象となります。より長いリクエストタイムアウトに合わせて環境を再構成できるはずです。
私の答えは元の質問に直接関係していませんが、PHPスクリプトの前にリバースプロキシロードバランサーがある場合、ロードバランサーは大きなアップロードをタイムアウトまたはブロックできます。常に負荷を確認してください。ファイルのアップロードをサポートする場合のバランサーの設定PHPと同様に、ほとんどのロードバランサーのアップロードのデフォルト設定はかなり小さいです。
問題を引き起こす可能性があるのは、タイムアウトだけではありません。アップロードできるファイルの最大サイズにはいくつかの制限があります。これらの制限は、php.iniファイルで変更できます。
post_max_size
upload_max_filesize memory_limit
詳細については http://uk.php.net/ini.core をご覧ください。
上記のパラメーターのいずれを変更しても違いが見られない場合は、HTMLフォームのどこかにMAX_FILE_SIZEという名前が非表示フィールドとして含まれている可能性があります。
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
上記の例では、10MBを超えるファイルはアップロードされません。