0

运行 Laravel 3。

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

我已经在我的控制器中尝试了这个并且路由没有成功(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

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

编辑:问题似乎是 laravel_POST在我什至可以在路由或控制器中检查它们之前加载所有输入。对我来说似乎是一个错误。

4

2 回答 2

0

这看起来像 PHP 的最大帖子大小,在许多系统上默认为 8M(大约 8388608 字节)。在 Laravel 中你无法解决这个问题,因为它是在 PHP 级别处理/管理/配置的。阅读增加最大帖子大小以了解如何更改此设置。

于 2013-05-21T07:57:01.617 回答
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();
        }
     }
});
于 2013-11-26T10:15:59.757 回答