web-dev-qa-db-ja.com

警告を防ぐ方法:POST Content-Length and memory size

現在、ユーザーが写真をアップロードすると、ページには「警告:POST Content-Length of[〜#〜] xxx [〜#〜]行0の不明の21000000バイトの制限を超えています。

私はそれが何を意味するのかを知っており、max_upload値やmemory_size_limitの増加などの解決策を探していません...ユーザーがwill明示的に最大20MBのファイルのみを伝え、画像のみが許可されている場合。

私は解決策を探しています:

  • この警告が発生するのを防ぐ方法は?
    または少なくとも:
  • この警告が表示されないようにする方法?

編集:お読みください! -もちろんエラー/警告の後(1行目以降)、問題はこれは仮想マシンで発生することを理解してください"line 0"これがエラーを非表示にするか、発生させないようにする必要がある理由です。エラーが発生する場所の前にコードを置くことができないためです。

EDIT2:最後に、非常に長い研究と掘り下げの後で、アイデアを得ました-うまくいきました-私自身の答えを見てください。

9
jave.web

それで、今日作業する代わりに検索した後、私はようやくこれを解決する方法のアイデアを得ました。しかし、それを行う前に、まずあなたが何をしているかを理解してください。 :)私がコメントの1つで提案したように、.htacessでPHPエラーをオフにすることは実際に可能です-PHP起動警告をオフにするだけです。

ソリューションを適用する前に:

注意:このコードを.htaccessに挿入すると、any起動エラーが表示されなくなります

また、次のことに注意してください。行 "0"には、これよりも多くの起動エラーがあります。

前に行う:これを行う前に、アップロードされたコンテンツのサイズをチェックする方法でスクリプトを準備し、適切な情報メッセージをユーザーに提供する必要があります。警告にが表示されないという事実は、何もする必要がないことを意味します。それは正反対です-少なくとも警告のレイズとほぼ同等の何かをするためにできることはすべて行う必要があります-チェックし、可能であればダブルチェックし、エラーを処理し、独自のエラーメッセージをレイズします。

これを.htaccessに追加します。

php_flag display_startup_errors off

それがそうであるように、それはそれほど悪ではありません:

これは起動エラーのみをオフにすることに注意してください。
すべての通常のPHPエラー/警告/通知はオンのままです:)

XAMPPのPHP「それ自体」でさえ、本番環境での使用を推奨しています。

php.iniファイルは文字通り次のように述べています:

; display_startup_errors
;   Default Value: Off
;   Development Value: On
;   Production Value: Off

PS:「起動エラー」はそれらのエラーのようですbeforePHPスクリプト自体が実行されます-これらのエラーは通常彼らが行0にいることをあなたに「説得」しようとしています。

私のアイデアとこの回答のおかげで: 。htaccessファイル内のPHPで通知と警告を無効にする方法?

EDIT:これはphp_flag設定であるため、PHPのカスタムインストールがある場合は、もちろんphp.iniでデフォルトで設定することもできます:)

11
jave.web

質問は

警告を防ぐ方法:POST Content-Length

答えは、設定値を編集せずに、処理するフォームを受け取るファイルの先頭にこのコードを配置することです。

 <?php // here start your php file
 ob_get_contents();
 ob_end_clean();

あれは。これ以上の警告はありません。また、ページに出力したくないものは何もありません。その後、他の場所で提案されているように、何を行うかを決定できます。

if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) && empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0){ echo"WoW your file is too big!"; }

別の方法でPhpによって処理されるファイルに関する正しい値を渡す場合、ファイルをチャンクすることもできます。

ここで説明するように 警告:POST Content-Lenght ...

5
axew3

このエラーを適切に防ぐためのREALソリューションを次に示します。

Php.iniでこのパラメーターを設定します。

enable_post_data_reading = On
upload_max_size=0
post_max_size=0

警告:フォームには必ずこの行を入れてください

<input type="hidden" name="MAX_FILE_SIZE" value="2048576" />

そして最も重要:

  • $ _FILES ['file'] ['error']のコードエラーを必ず確認してください

  • PHPも)でアップロードのサイズを確認してください

1
Romain GALVEZ

似たような問題があります。満足のいく解決策が見つかるかどうか疑問に思いました。現在、私の 'PHP警告:POST Content-Lengthの21010354バイトが8388608の制限を超えています'がログにあります。これについて私ができることは多くないと思います。

私はZendフレームワーク内で作業しており、ユーザーが上記のようにファイルをアップロードすると、基本的に通常のすべてのPOSTデータ解析が強制終了されるため、getParams()への応答には通常のいずれも含まれません。 POSTパラメータ。これは、ユーザーがフィールドの1つが欠落していると言う誤解を招く検証エラーが発生していることを意味します。

これを調査したところ、特にenable_post_data_readingとalways_populate_raw_post_dataを見たいと思われるいくつかの興味深いphp_ini設定が見つかりました。私の場合、最大8Mの投稿ファイルと最大10Mのアップロードファイルを含む20Mファイルをアップロードしています。投稿データが空になったにもかかわらず、php:// inputからの結果は20Mファイルでいっぱいのようです。

したがって、生データが制限を超えているかどうかを手動で確認し、上限を超えた場合(および保釈)、すべてが失敗したと想定します。 $ _POSTデータを入力するために、生データを解析する独自のコードを作成することをお勧めします。次に、必要に応じてコードを起動できます。準備ができたときにのみ、ユーザーが制限を超えてデータをアップロードしていないか確認してください。解析する前にエラーを返すか、問題がなければ解析するかは、あなた次第です。 PHP投稿およびアップロードの制限をユーザー制限を超えて設定している限り、これによりユーザーはルールを破ることができ、コードが違反を検出して不平を言うことができるようになります。

1
sibaz

すでにご存知のように、PHPは1行目以降のエラーしかキャッチできないため、PHPでそれを行うことは不可能です。

唯一の回避策は、PHPソースコードを調べ、そのエラーがスローされた場所を見つけて、その一部をPHPソースから削除してから、衣装phpをコンパイルすることです。バージョン。

ただし、エラーメッセージが理由でスローされることに注意してください。

0
Alexander