Как решить ошибку таймаута в 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. После этого он будет работать.