【问题标题】:PHP file uploading and detecting file sizePHP文件上传和检测文件大小
【发布时间】:2014-03-05 09:58:00
【问题描述】:

我有一个允许用户上传文件的表单,但我在检测太大的文件时遇到了问题。

我在 php.ini 中有以下设置:

upload_max_filesize = 10M
post_max_size = 20M

我知道检测文件是否大于配置文件允许的标准方法是检查$_FILES['file_name']['error']。但是,这仅适用于实际文件大于 upload_max_filesize 且小于 post_max_size 的情况。

如果实际文件大小大于post_max_size,则删除$_FILES 变量,我会收到日志消息:

PHP 警告: XXX 字节的 POST 内容长度超过了 年年...

所以问题是:我如何检测用户是否正在上传大于post_max_size 的文件?如果发生这种情况,我需要显示有效的用户消息。

谢谢。

【问题讨论】:

标签: php file-upload


【解决方案1】:

我建议您使用set_error_handler() 并检查E_USER_WARNING 错误+ 适当的消息,然后将其发送给用户,可能通过抛出异常,也可能是其他方式。

【讨论】:

  • 您也可以使用@ 来抑制错误消息。见php.net/manual/en/language.operators.errorcontrol.php
  • @JhulianoMoreno:但是你想把@放在……前面是什么?据我了解,此警告不是由特定的代码行引发的,而是在脚本启动时......
  • 无法抑制此错误,最初的问题是 OP 想要将这个错误实际呈现给用户,而不是隐藏它。
【解决方案2】:

像这样:

$filesize = $_FILES['file']['size'];
$limit = ini_get('post_max_size');
if($filesize > $limit) {
   trigger_error("POST Content-Length of $filesize bytes exceeds the limit of $limit bytes.", E_WARNING);
}
else {
  // upload file
}

【讨论】:

  • 谢谢,但是如果文件大小 > post_max_size,$_FILES 全局是空的,所以我不能做这个检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2017-01-30
  • 1970-01-01
  • 2011-08-20
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多