PHP $ _ POST / $ _FILES空当比post_max_size要上传更大的[复制](

2019-07-30 09:47发布

可能重复:
如何检测如果用户上传的文件比post_max_size要大?

我正在写从Web应用程序处理文件上传脚本。 我已经有了文件的大小可能被上传到我的应用程序(存储空间限制)设置的限制。 目前,我试图把一些验证代码,将检查,以确保用户实际上传的文件,这样我可以显示一个友好的错误信息给他们。 但我也想能够显示错误信息给用户,如果他们已经上传的文件太大。 我可以使用JavaScript这一点,但我想一个PHP检查,以及如果他们不启用JavaScript。

我已经把我的post_max_size VAR在php.ini中是最大文件上传大小,但是这已经产生了一个意想不到的问题。 如果有人试图上传比post_max_size要大文件,二进制数据只是获取的最大尺寸截断和$ _FILES数组不包含该文件的条目。 这是如果用户没有提交文件,同时会出现相同的行为。

这使得它很难说为什么$ _FILES数组不包含一个文件,即它是否从不为上传,或者它是否是太大了,完全发送。

有没有办法这两种情况之间的区别? 换句话说,有没有办法告诉是否POST数据的文件发送,而过早地截断发送整个文件之前?

Answer 1:

奇怪,因为它看起来, 这是故意的行为 ,因为post_max_size设置为低电平最终故障保护,并保护您和防止DoS攻击,有没有办法让服务器可以做任何事情,但丢弃所有的POST数据,当它意识到,中流, ,它的接收更多的数据比它可以安全地处理。 您可以提高,如果你知道你需要在一次接受比这更多的数据,该值(但要确保你的服务器能够处理增加的负载,这将穿上它),但我会建议寻找到处理您的使用情况等方式,击中补防的post_max_size建议,我认为有可能比一个庞大的HTTP POST更强大的解决方案,比如它拆分成多个AJAX调用,例如。

从独立的post_max_size有UPLOAD_MAX_SIZE这是php.ini中设置一个文件限制,这是我假设你在谈论最初。 它限制任一上传的文件的大小,并且如果文件超过值,它将设置$_FILES['file']['error']1 。 一般来说,你希望你的站点设置了这样的:

  • <form> MAX_FILE_SIZE应设置为你真正想要接受这种形式的最大值。 虽然任何用户试图利用你的网站可以解决这个问题,它是实际使用您的网站的用户不错的,因为浏览器会( 实际上,可能 ),防止他们浪费试图把它上传带宽。 这应该是比你的服务器端设置较小。
  • upload_max_filesize的是最大尺寸的服务器将接受,丢弃任何东西更大,报告错误到$_FILES数组。 这应该是比你想在你的网站上实际上接受的最大文件
  • 的post_max_size是你的服务器是愿意在一个POST请求接受的最大数据量。 这必须是比UPLOAD_MAX_SIZE大,以便较大的上载成功,而且必须更大,以便在同一时间多个文件上传。 我可能会建议的upload_max_filesize * 4.1的值 - 这将允许四个大文件的时间,一点点额外的数据一起。 当然情况因人而异,你应该确保你的服务器可以正确处理您决定设置的任何值。

为了您的如何判断具体问题上的post_max_size PHP文件我挂提示设置形式,即一个GET变量

<form action="edit.php?processed=1">

但是就像我上面说的,如果你遇到了这个问题,你可能需要探索其他的上传方法。



Answer 2:

事情是这样的:

if ($_SERVER['CONTENT_LENGTH'] && !$_FILES && !$_POST) {
  // upload failed
}

未经检验的,所以玩的各种情况,看看什么样的组合工作。 不知道这是否与多文件上传在同一时间工作。

您可能需要检查$_SERVER['CONTENT_LENGTH']并将其与文件的总和收到如果处理多个上传。



文章来源: PHP $_POST / $_FILES empty when upload larger than POST_MAX_SIZE [duplicate]