web-dev-qa-db-ja.com

PHPでファイルのアップロードがタイムアウトすることはありますか?

こんにちは、PHPの初心者です。非常に大きなcsvファイルをサーバーにアップロードするためのフォームを作成しました。アップロードするファイルが大きいためにブラウザがタイムアウトする可能性があると私に言った人がいますが、これは本当ですか?もしそうなら、それを防ぐことができますか?

ご協力いただきありがとうございます!

34
Ben McRae

次のphp.ini設定には適切な値が必要です。

  1. max_input_timenotmax_execution_time!)
  2. pload_max_filesize
  3. post_max_size

そして多分

  1. memory_limit
56
Ionuț G. Stan

値が小さすぎる場合、大規模なアップロードが失敗する可能性のあるいくつかの構成ディレクティブがあります。

PHP

  • max_input_timePOST、GET、ファイルアップロードなど、入力データをスクリプトが解析できる最大時間(秒)
  • upload_max_filesizeアップロードされたファイルの最大サイズ。
  • post_max_size許可される投稿データの最大サイズ。

アパッチ

  • TimeOutリクエストに失敗する前にサーバーが特定のイベントを待機する時間
  • LimitRequestBodyクライアントから送信されるHTTPリクエストボディの合計サイズを制限します

おそらくこれ以上のものがあります。

30
Gumbo

PHPでの大きなファイルアップロードの不適切な処理を回避する良い方法は、送信する前にファイルをチャンクに分割する JUpload のようなアップローダーを使用することです。これには、アップロード中に適切な進捗フィードバックが得られ、一度に複数のファイルをアップロードできるという利点もあります。

5
Ronny Vindenes

非常に大きなファイルをアップロードする場合、4つの構成変数を変更する必要があります。

  • upload_max_filesize
  • post_max_size
  • memory_limit
  • time_limit

Set_time_limit()を使用すると、実行時に制限時間を延長できます。

3
vartec

デフォルトでは、スクリプトは30秒程度実行できます。 set_time_limit()function を使用してこれを変更できます。また、ユーザーが大きなファイルをアップロードする必要がある場合は、php.iniファイルのpost_max_sizeやupload_max_filesizeの値を変更する必要があります。

また、タイムアウト制限をグローバルに延長したい場合は、php.iniでmax-execution-timeを変更できます。

2
Beep beep

私は次の設定を使用してこの問題を解決できました。異なる値を使用できますが、アイデアは得られます:

私のサーバーでは、これらの行をスクリプトディレクトリ内の「.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
1
Jim B

はい、そうです。ファイルのアップロードはPOSTリクエストを介して行われ、リクエストは一般にタイムアウトの対象となります。より長いリクエストタイムアウトに合わせて環境を再構成できるはずです。

1
Ates Goral

私の答えは元の質問に直接関係していませんが、PHPスクリプトの前にリバースプロキシロードバランサーがある場合、ロードバランサーは大きなアップロードをタイムアウトまたはブロックできます。常に負荷を確認してください。ファイルのアップロードをサポートする場合のバランサーの設定PHPと同様に、ほとんどのロードバランサーのアップロードのデフォルト設定はかなり小さいです。

1
Cory R. King

問題を引き起こす可能性があるのは、タイムアウトだけではありません。アップロードできるファイルの最大サイズにはいくつかの制限があります。これらの制限は、php.iniファイルで変更できます。

post_max_size
upload_max_filesize memory_limit

詳細については http://uk.php.net/ini.core をご覧ください。

1
macleojw

上記のパラメーターのいずれを変更しても違いが見られない場合は、HTMLフォームのどこかにMAX_FILE_SIZEという名前が非表示フィールドとして含まれている可能性があります。

<input type="hidden" name="MAX_FILE_SIZE" value="10000000">

上記の例では、10MBを超えるファイルはアップロードされません。

0
David Robertson