2014-02-20 72 views
2

我得到尝试上传的文件过大时,下面的PHP错误:获得一个PHP错误,当我想要一个笨错误

POST Content-Length of 1034425027 bytes exceeds the limit of 33554432 bytes in Unknown

但我有以下我的控制器设置:

$config['max_size'] = '10000';

所有的解决方案我看到包括增加post_max_size等...但我不想让大文件上传 - 我想要一个错误,只是一个CI,而不是一个PHP一个我可以做n无与伦比。

任何想法?这只是PHP中的一个缺陷?我宁愿不处理ajax中的'false'返回作为文件上传错误,因为从技术上讲,这可能是由任何服务器错误产生的。

编辑;为了澄清,因为我得到的代码请求不会揭示任何事情(我只能假设这个问题被误解):

如果文件在10mb(由CI设置的限制)和32mb(由post_max_size设置的限制)一切工作正常 - 没有代码问题。但是如果文件大于32mb,PHP会在CI解析它并为我提供适当的错误之前捕获该文件,所以我没有机会正确标记大文件,除非将post_max_size设置为无限大 - 这看起来既危险又有缺陷。我想知道是否有办法解决这个问题。理想情况下,我不需要服务器参与到CI验证之后,因为我宁愿标记一个用户友好的错误,而不是POST才会死掉。

+0

你为什么不尝试通过增加在PHP大小INI –

+0

因为我不希望用户能够上传大文件?除非我能将其设置为“无限”,否则无法解决问题。 –

+0

请显示您的上传代码。 – Sena

回答

1

最好的办法是在尝试上传之前用js [1]检查文件大小。除此之外,唯一的选择是增加帖子大小或创建自己的错误hander [2]。

[1] https://stackoverflow.com/a/7497439/183254

[2] http://www.php.net/manual/en/function.set-error-handler.php/https://stackoverflow.com/a/11745361/183254

+0

啊,甚至没有想过先用JS来检查(无论如何我都是通过ajax运行的,所以这是一个不错的选择)。我至少可以检查大于最大文章大小的文件,并让CI处理剩下的文件。谢谢! –

0

首先增加php.ini中的大小,即upload_max_size。默认情况下,PHP设置将通过php代码读取,然后codeigniter设置。所以增加.ini文件的大小。

+0

因此CI设置中的最大文件大小是没有意义的?我可以将max_post_size设置为1TB,但有人仍然可以尝试上载1.1TB的文件 - 而且我无法为它们提供错误,PHP只是失败。这看起来不正确。 –

+0

@nathan CI设置也很重要。在所有项目中,PHP设置都是全球性的。但CI设置仅适用于CI特定项目。 –

+0

如果您尝试上传超过PHP大小的文件,则会失败并且上传不成功。不要混淆CI和PHP设置。只需按照您的要求定义PHP和CI中的最大大小。 –