Laravel 3 - POST内容长度异常

时间:2013-05-21 05:33:02

标签: php exception-handling laravel laravel-3

运行Laravel 3.

我正在尝试使用laravel框架上传文件。如果文件大于upload_max_filesize的php设置,则会抛出以下异常。

我在我的控制器和路由中尝试了这个并没有成功(if语句运行 - 它设置了一个会话 - 但仍然抛出异常显示错误页面)

if ($_SERVER['CONTENT_LENGTH'] > 8380000) {
    //do stuff here because its too big
    // set a session and exit()
}

如何在不增加php内存限制的情况下防止抛出此异常?

错误:

Unhandled Exception

Message:

POST Content-Length of 9306598 bytes exceeds the limit of 8388608 bytes
Location:

Unknown on line 0

作为旁注,除了“增加你的php内存限制”之外,这个问题至少在laravel论坛上被问过两次没有给出好的答案。

编辑:问题似乎是laravel正在加载所有_POST输入,然后我甚至可以在路由或控制器中检查它们。对我来说似乎是一个错误。

2 个答案:

答案 0 :(得分:0)

这看起来像PHP的max post size,在许多系统上默认为8M(大约8388608字节)。在Laravel中没有什么可以解决这个问题,因为它在PHP级别处理/管理/配置。阅读Increasing the maximum post size,了解如何更改此内容。

答案 1 :(得分:0)

PHP正在提升警告,而Laravel正在将其视为致命错误。 这是在Error::shutdown中完成的,抛出的任何PHP错误都会导致应用程序因此错误而关闭。

我找到的解决方案是过滤允许哪些错误类型在Error::shutdown中结束 缺点是:

  • 需要修改laravel文件:laravel/laravel.php如果您计划使用新版本更新laravel(现在版本4.1很难发生),这不是一个好主意。
  • 无法通过不中止警告错误来完全测试这是否意味着laravel行为会产生一些副作用。

这是我在文件laravel/laravel.php第46行中所做的修改:

register_shutdown_function(function()
{
    require_once path('sys').'error'.EXT;
    $error = error_get_last();

    if ( $error!==null )
    {
        if( $error['type']!=E_WARNING )
        {
            Error::shutdown();
        }
     }
});