9

PHPスクリプトでエラーをキャッチするために必要な作業をすでに行っていると思ったので、エラーログに上記のエラーが見つかったのは非常に驚きです。

if ($_FILES['image']['error'] == 0)
{
 // go ahead to process the image file
}
else
{
 // determine the error
 switch($_FILES['image']['error'])
 {
  case "1":
  $msg = "Uploaded file exceeds the upload_max_filesize directive in php.ini.";
  break;
  ....
 }
}

私のPHP.iniスクリプトでは、関連する設定は次のとおりです。

memory_limit = 128M
post_max_size = 3M
upload_max_filesize = 500K

3Mは3145728バイトに相当し、これがエラーのトリガーになっていることを理解しています。ファイルサイズが500kを超え3M未満の場合、PHPスクリプトは通常どおりに実行でき、のようにエラーメッセージを発行し$msgますcase 1

投稿サイズがメモリ制限を超えても十分にメモリ制限内にある場合に、PHP警告でスクリプトを突然終了させる代わりに、このエラーをキャッチするにはどうすればよいpost_max_sizeですか?ここここここで同様の質問を見てきましたが、答えが見つかりませんでした。

4

2 に答える 2

15

エラーを直接処理しない代替ソリューションを見つけました。次のコードは、ソフトウェアエンジニアのAndrewCuriosoがブログで書いています。

if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) &&
     empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0)
{
  $displayMaxSize = ini_get('post_max_size');

  switch(substr($displayMaxSize,-1))
  {
    case 'G':
      $displayMaxSize = $displayMaxSize * 1024;
    case 'M':
      $displayMaxSize = $displayMaxSize * 1024;
    case 'K':
       $displayMaxSize = $displayMaxSize * 1024;
  }

  $error = 'Posted data is too large. '.
           $_SERVER[CONTENT_LENGTH].
           ' bytes exceeds the maximum size of '.
           $displayMaxSize.' bytes.';
}

彼の記事で説明されているように、投稿サイズがを超えるpost_max_sizeと、とのスーパーグローバル配列は空$_POST$_FILESなります。したがって、これらをテストし、POSTメソッドを使用して送信されているコンテンツがあることを確認することにより、このようなエラーが発生したと推測できます。

実際、ここにも同様の質問がありますが、以前は見つけることができませんでした。

于 2012-07-31T17:05:27.107 に答える
1

アップロードが行われる前に、最初にjavascriptで確認できますか?

// Assumed input for file in your HTML
<input type="file" id="myFile" />


//binds to onchange event of your input field
$('#myFile').bind('change', function() {
    alert(this.files[0].size);
});

また、その周りにトライキャッチをポップすることもできます:

try 
{
    if (!move_uploaded_file( 'blah blah' )) 
    {
        throw new Exception('Too damn big.');
    }
    // Can do your other error checking here...
    echo "Upload Complete!";
} 
catch (Exception $e) 
{
    die ('File did not upload: ' . $e->getMessage());
}
于 2012-07-31T11:24:43.453 に答える