如何检测用户是否上传了大于post_max_size的文件?

Cap*_*ffe 10 php file-upload php-5.3

我应该如何处理超出post_max_size理智的http上传?

在我的配置post_max_size中比upload_max_filesize 我遇到的问题大几MB :
如果用户上传的文件超过post_max_size

  • _POST数组为空
  • _FILES数组为空,当然其中没有任何错误代码.
  • 没有其他信息通过这些方式可以访问哪种形式的帖子.

部分问题是接收脚本根据POST的内容采取不同的操作.

我也有机会获得_SERVER变量,并能得到线索,发生了什么事,即CONTENT_TYPE,CONTENT_LENGTHREQUEST_METHOD.然而,根据这些内容进行猜测似乎很成问题.

发现MEMORY_LIMIT(设置为相关大小的10倍)和Apaches LimitRequestBody(设置为无限制)没有错.

就目前而言,我甚至很难向用户提供任何有意义的消息.

有没有办法保留一些表格数据,以获得更好的线索,哪些出了问题?我非常不愿意离开php.

Mat*_*hew 10

对于不需要服务器端更改的简单修复,我会在上传之前使用HTML5 File API检查文件的大小.如果超出已知限制,则取消上传.我相信这样的事情会起作用:

function on_submit()
{
  if (document.getElementById("upload").files[0].size > 666)
  {
    alert("File is too big.");
    return false;
  }

  return true;
}

<form onsubmit="return on_submit()">
<input id="upload" type="file" />
</form>
Run Code Online (Sandbox Code Playgroud)

显然它只是一个例子的骨架,并不是每个浏览器都支持这个.但是使用它并没有什么坏处,因为它可以以这样一种方式实现,即它可以优雅地降级为旧浏览器.

当然,这并不能解决问题,但它至少可以让您的用户满意,并且只需要很少的工作量.(他们甚至不必等待上传失败.)

-

另外,检查$_SERVER['CONTENT_LENGTH']帖子和文件数据的大小可能有助于检测是否出现故障.我觉得这时候有这将是非零的错误,同时$_POST$_FILES两个都会是空的.