2013-05-21 5 views
0

Running Laravel 3.Laravel 3 - POST Content-Length Exception

Я пытаюсь загрузить файлы с помощью рамки 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», за исключением.

EDIT: проблема заключается в том, что laravel загружает все входы _POST, прежде чем я могу даже проверить их на маршруте или контроллерах. Кажется, это ошибка.

ответ

0

Это выглядит как PHP max post size, по умолчанию 8M на многих системах (около 8388608 байт). В Laravel ничего не поделаешь, чтобы обойти это, поскольку он обрабатывается/управляется/настраивается на уровне PHP. Прочитайте Increasing the maximum post size, чтобы узнать, как это изменить.

+0

Да, я знаю, что это PHP max_post_size. Таким образом, нет никакого способа обойти это, кроме увеличения пределов? – cantaffordretail

+0

Единственными другими решениями, которые я видел в Интернете, являются плагины, основанные на флеш-памяти, которые выгружают загрузку, а затем снова объединяют куски на сервере. Взгляните на http://www.plupload.com/, если это так, как вы хотите –

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(); 
     } 
    } 
});