当我需要 CodeIgniter 错误时出现 PHP 错误
Posted
技术标签:
【中文标题】当我需要 CodeIgniter 错误时出现 PHP 错误【英文标题】:Getting a PHP error when I want a CodeIgniter error 【发布时间】:2014-03-21 07:53:19 【问题描述】:我在尝试上传太大的文件时遇到以下 php 错误:
POST Content-Length of 1034425027 bytes exceeds the limit of 33554432 bytes in Unknown
但我的控制器中有以下设置:
$config['max_size'] = '10000';
我看到的所有解决方案都涉及增加post_max_size
等……但我不想允许上传更大的文件 - 我想要一个错误,只是 CI 错误,而不是 PHP 错误,我无能为力。
有什么想法吗?这只是PHP中的一个缺陷吗?我宁愿不将 ajax 中的“假”返回作为文件上传错误处理,因为从技术上讲,这可能是由任何服务器错误产生的。
编辑;澄清一下,因为我收到的代码请求不会对任何事情产生任何影响(我只能假设这个问题被误解了):
如果文件介于 10mb(CI 设置的限制)和 32mb(post_max_size 设置的限制)之间,一切正常 - 没有代码问题。但是如果文件大于 32mb,PHP 会在 CI 解析文件之前捕获文件并为我提供适当的错误,所以我没有机会正确标记大文件,除非我将 post_max_size 设为无限大 - 这似乎既危险又存在缺陷。我想知道是否有办法解决这个问题。理想情况下,在 CI 验证之前我不需要服务器参与,因为我宁愿标记一个用户友好的错误,而不是 POST 就死了。
【问题讨论】:
你为什么不通过增加 php ini 的大小来尝试一下 因为我不希望用户能够上传更大的文件?除非我可以将其设置为“无限”,否则无法解决问题。 请出示您的上传代码。 嗨,Sena,我不确定我可以向您展示什么感兴趣的内容。这是一个通过 ajax 运行的非常标准的 CI 上传。问题是 ajax 只是得到一个“假”返回,因为 PHP 在上传代码甚至有机会运行之前就产生了一个错误。所以我无法得到“max_size”错误,因为用户总是可以尝试上传大于 post_max_size 的文件(不管设置什么,用户总是可以尝试上传一个大文件)。 您可以证明您正在正确加载配置等。我不明白为什么人们拒绝展示他们想要帮助的代码...... 【参考方案1】:最好的办法是在尝试上传之前使用 js [1] 检查文件大小。除此之外,唯一的选择是增加帖子大小或创建自己的错误处理程序 [2]。
[1]https://***.com/a/7497439/183254
[2]http://www.php.net/manual/en/function.set-error-handler.php/https://***.com/a/11745361/183254
【讨论】:
啊,甚至没想过先检查 JS(反正我正在通过 ajax 运行,所以这是一个不错的选择)。我至少可以检查大于最大帖子大小的文件,并让 CI 处理其余的。谢谢!【参考方案2】:首先增加 php.ini 中的大小,即upload_max_size。默认情况下,PHP 设置将由 php 代码读取,然后是 codeigniter 设置。所以增加 .ini 文件的大小。
【讨论】:
那么 CI 设置中的最大文件大小是没有意义的?我可以将 max_post_size 设置为 1TB,但有人仍然可以尝试上传 1.1TB 的文件——我无法向他们提供错误,PHP 只是失败了。这似乎不对。 @nathan CI 设置也很重要。 PHP 设置在所有项目中都是全局的。但 CI 设置仅适用于 CI 特定项目。 如果您尝试上传超过 PHP 大小的文件,则会失败并且上传不会成功。不要混淆 CI 和 PHP 之间的设置。只需根据您的要求在 PHP 和 CI 中定义最大大小。 认为你没有理解我的意思。我理解这些事情 - 但如果用户尝试上传大于 post_max_size 设置的内容,CI 设置就会变得多余。仅当您在一台机器上运行多个服务时,“逐个项目”设置才有意义——这是一种特定的场景。我不介意上传不能成功,我不希望它成功,我只想能够处理错误 - 如果用户尝试上传大于 post-max-size 的东西,这是不可能的,由于服务器刚刚倒下。这是 IMO 糟糕的设计。 澄清一下,在我看来,顺序应该颠倒过来。让代码(前端和后端)处理事情,直到需要进行最终检查。如果 Ci 设置为 10mb 并且 post_max_size 设置为 32mb 并且用户尝试上传 40mb 的文件,则 CI 应该有机会在服务器限制生效之前处理该错误,这应该是 IMO 的最终检查。当然这是不可能的,但我希望能以某种方式绕过这个缺陷。增加 post_max_size 并不能解决这个问题,除非它被设置为infinite
- 这使得它变得多余。以上是关于当我需要 CodeIgniter 错误时出现 PHP 错误的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试运行使用 CodeIgniter 编写的项目时出现 Xampp 未知错误
在 PHP,Codeigniter 中提交带有空字段的表单时出现一些错误
调用未定义函数 codeigniter\locale_set_default() 时出现 codeigniter 错误