PHPで非常に大きなファイルをアップロードするときにエラーはありませんか?

StackOverflow https://stackoverflow.com/questions/615312

  •  03-07-2019
  •  | 
  •  

質問

ファイルをアップロードするためのPHPフォームがあり、問題なく機能し、エラーが発生した場合はエラーメッセージが表示されます。これはすべて良いです。

問題は、本当に大きなファイルでテストする場合、ファイルをまったく送信していないかのようにページを更新するだけで、フォームからの$ _POST変数もサーバーに送信されないことです。

ユーザーにエラーを表示し、ファイルが大きすぎることを知らせたい。ただし、これはできません。

誰が何が起きているか知っていますか?

役に立ちましたか?

解決

PHP iniファイルを確認します。これは、PHPがアップロードできるファイルのサイズを管理します。これらの変数は重要です:

  • 最大アップロードファイルサイズ(upload_max_filesize)
  • 最大投稿データサイズ(post_max_size)
  • メモリ制限(memory_limit)

これらの範囲外のアップロードは、設定に応じて無視されるかエラーになります。

ドキュメントのこのセクションには、最良の要約があります: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

編集:また、ほとんどのブラウザは2GBを超えるサイズのアップロードを送信しないことに注意してください。このリンクは古くなっていますが、アイデアを提供します: http://www.motobit.com/help /scptutl/pa98.htm 。誰もこれに関するより良い情報源を持っていますか?

Apacheなど、サーバーによって課せられる制限もあります。 http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

実際に何が起こっているのかを確認するには、Webサーバーのログを確認し、ブラウザーのアップロード制限(firefoxを使用している場合)を確認し、print_r($_FILES)が有用なエラー番号を生成するかどうかを確認してください。他のすべてが失敗した場合は、firebugでネットトラフィックモニターを試してください。重要なのは、リクエストがサーバーに送られるかどうか、そしてリクエスト(ヘッダーを含む)がどのようなものかを判断することです。チェーンをこれまでに取得したら、戻ってPHPがアップロードをどのように処理しているかを確認できます。

他のヒント

アップロードが post_max_size ディレクティブを超えたため、あなたの$ _POSTはほとんどの場合空です:

PHPのディレクティブページから:

  

投稿データのサイズが大きい場合   post_max_sizeよりも $ _ POST   および$ _FILESスーパーグローバルは空です。   これはさまざまな方法で追跡できますが、   例えば$ _GET変数を渡すことにより   データを処理するスクリプト、つまり   <form action="edit.php?processed=1">、および   次に、$ _ GET ['processed']かどうかを確認します   設定されています。

完全にアップロードされるまで、アップロードされているファイルのサイズを知ることはできません。そのため、ファイルサイズを決定し、大きなファイルのエラーを表示する場合は、まずファイルをアップロードしてからファイルサイズを確認する必要があります。大きなファイルをアップロードするには、php構成ファイルphp.iniで2つの設定を行う必要があります。 開いて<!> quot; upload_max_filesize <!> quot;を検索します。値を必要な最大値に設定します。アップロードされたファイルはHTTP POSTメソッドを介して受信されるため、POSTパラメーターの最大値を設定する必要があります。 find <!> quot; post_max_size <!> quot;そして大きな値に設定します。

アップロードがどれだけ行われたかを知るために、通常のajax呼び出しを行う簡単なスクリプトを実装します。その後、何らかのプログレスバーを実装できます。ネットにはいくつかの例があります:

http://martinjansen.com/ 2007/04/28 / file-upload-progress-bars-with-php /

最大アップロードファイルサイズ(upload_max_filesize) 最大投稿データサイズ(post_max_size) 設定する必要があるディレクティブです。複数のOS、ブラウザなどでテストしましたが、心配する必要があるのはこれら2つだけです。

以前のユーザーが答えたように、オプションを別にしてください:

max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)

1つあります。ファイルが非常に大きい場合、または行がビジーの場合、この操作を実行するのに多くの時間が必要であり、スクリプトの実行制限の限界に達します。

max_execution_time
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top