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 脚本将能够正常运行,并在$msgas per中发出错误消息case 1

post_max_size当帖子大小超过但仍在内存限制内时,如何捕获此错误,而不是让脚本突然终止并发出 PHP 警告?我在这里这里这里查看了类似的问题,但找不到答案。

4

2 回答 2

15

找到了不直接处理错误的替代解决方案。以下代码由软件工程师 Andrew Curioso 在他的博客中编写:

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 方法发送,可以推断出发生了这样的错误。$_POST$_FILES

这里实际上有一个类似的问题,我之前没能找到。

于 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 catch:

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 回答