Как решить ошибку таймаута в Laravel 5
У меня есть следующие настройки:
В маршрутах у меня есть:
Route :: get ('Articles', 'ArticlesController @index');
Индексный метод в контроллере просто:
public function index()
{
$articles = Article::all();
return View('articles.index', compact('articles'));
}
и в представлении:
@extends('../app')
@section('content')
<h1>Articles</h1>
<p>
@foreach($articles as $article)
<article>
<h2><a href="{{action('[email protected]', [$article->id])}}">{{$article->title}}</a></h2>
<p>{{ $article->body }}</p>
</article>
@endforeach
</p>
@stop
Я попытался заменить:
$articles = Article::all();
с
$article = Article::latest()->get();
так что я могу показать статьи в первую очередь. Я получил ошибку:
FatalErrorException in Str.php line 322:
Maximum execution time of 30 seconds exceeded
и стек вызовов:
in Str.php line 322
at FatalErrorException->__construct() in HandleExceptions.php line 131
at HandleExceptions->fatalExceptionFromError() in HandleExceptions.php line 116
at HandleExceptions->handleShutdown() in HandleExceptions.php line 0
at Str::snake() in helpers.php line 561
at snake_case() in ControllerInspector.php line 105
at ControllerInspector->getVerb() in ControllerInspector.php line 78
at ControllerInspector->getMethodData() in ControllerInspector.php line 39
at ControllerInspector->getRoutable() in Router.php line 251
at Router->controller() in Router.php line 226
at Router->controllers() in Facade.php line 210
at Facade::__callStatic() in routes.php line 21
at Route::controllers() in routes.php line 21
in RouteServiceProvider.php line 40
... так далее
Я восстановил метод контроллера до того, каким он был, но ошибка сохраняется.
Подскажите, пожалуйста, как я могу решить эту проблему?
Ответы
Ответ 1
Максимальное время выполнения 30 секунд превышено. Ошибка не связана с Laravel, а скорее вашей конфигурацией PHP.
Вот как вы можете это исправить. Значение, которое вам нужно изменить, - max_execution_time
.
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
Вы можете изменить max_execution_time
на 300
секунды, например max_execution_time = 300
Вы можете найти путь к файлу конфигурации PHP в выводе функции phpinfo
в разделе Loaded Configuration File
.
Ответ 2
это чистая настройка PHP.
Альтернативой является увеличение времени выполнения только для определенных скриптов php, вставив поверх этого файла php следующее:
ini_set('max_execution_time', 180); //3 minutes
Ответ 3
В Laravel:
Добавьте строку set_time_limit (0) поверх запроса.
set_time_limit(0);
$users = App\User::all();
Он помогает вам в разных больших запросах, но вам нужно улучшить оптимизацию запросов.
Ответ 4
Иногда вам просто нужно оптимизировать ваш код или запрос. Настройка max_execution_time не является решением.
Код не должен запускаться более 30 секунд.
Ответ 5
пытаться
ini_set('max_execution_time', $time);
$articles = Article::all();
где $time
- в секундах, установите его на 0 без времени. убедитесь, что вы вернулись на 60 после завершения функции
Ответ 6
установите ограничение по времени в методе __construct или вы также можете установить в своем контроллере индекса, где вы хотите иметь большое ограничение по времени.
public function __construct()
{
set_time_limit(8000000);
}
Ответ 7
Если вы используете PHP7, я бы предложил вам изменить значение по умолчанию в public/.htaccess
<IfModule php7_module>
...
php_value max_execution_time 300
...
</IfModule>
Ответ 8
Выполнение не связано с laravel. Перейдите в файл php.ini. В файле php.ini установите max_execution_time = 360 (время может быть переменным в зависимости от необходимости), если вы хотите увеличить выполнение конкретной страницы, напишите ini_set ('max_execution_time', 360 ) вверху страницы
в противном случае в htaccess php_value max_execution_time 360
Ответ 9
Добавить указанный выше запрос
ini_set ("memory_limit", "10056M");
Ответ 10
Если вы размещаете свое приложение Laravel на Heroku, вы можете создать custom_php.ini
в корне вашего проекта и просто добавить max_execution_time = 60
Ответ 11
Параметры -MultiViews -Indexes
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
#cambiamos el valor para subir archivos
php_value memory_limit 400M
php_value post_max_size 400M
php_value upload_max_filesize 400M
php_value max_execution_time 300 #esta es la linea que necesitas agregar.
Ответ 12
Вам нужно просто нажать CTRL + F5. После этого он будет работать.