编程语言
首页 > 编程语言> > php – 如何检测用户是否上传了大于post_max_size的文件?

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

作者:互联网

我该如何以理智的方式处理超过post_max_size的http上传?

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

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

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

我可以访问_SERVER变量,并可以获得有关发生的事情的线索,即CONTENT_TYPE,CONTENT_LENGTH和REQUEST_METHOD.然而,根据这些内容进行猜测似乎很成问题.

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

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

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

解决方法:

对于不需要服务器端更改的简单修复,我会在上传之前使用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>

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

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

顺便说一句,检查$_SERVER [‘CONTENT_LENGTH’]与帖子和文件数据的大小可能有助于检测是否有失败.我认为当出现错误时它将不为零,而$_POST和$_FILES都是空的.

标签:php-5-3,php,file-upload
来源: https://codeday.me/bug/20190927/1824372.html