PHPで非常に大きなファイルをアップロードするときにエラーはありませんか?
質問
ファイルをアップロードするための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