web-dev-qa-db-fra.com

Comment résoudre une erreur de délai d'attente dans Laravel 5

J'ai la configuration suivante:

Dans les itinéraires j'ai:

Route :: get ('articles', 'ArticlesController @ index');

La méthode d'indexation dans le contrôleur est simplement:

public function index()
        {
            $articles = Article::all();
            return View('articles.index', compact('articles'));
        }

et dans la vue:

@extends('../app')
@section('content')
<h1>Articles</h1>
<p>
    @foreach($articles as $article)
    <article>
        <h2><a href="{{action('ArticlesController@show', [$article->id])}}">{{$article->title}}</a></h2>
        <p>{{ $article->body }}</p>
    </article>
    @endforeach
</p>
@stop

J'ai tenté de remplacer le: 

$articles = Article::all();

avec

$article = Article::latest()->get();

de telle sorte que je puisse réellement montrer les articles les plus récents en premier .

FatalErrorException in Str.php line 322:
Maximum execution time of 30 seconds exceeded

et la pile d'appels est:

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

... etc

J'ai restauré la méthode du contrôleur à ce qu'elle était, mais l'erreur persiste.

Pouvez-vous s'il vous plaît me dire comment je peux résoudre ce problème?

24
Geordie Gadgie

Le maximum du temps d'exécution dépassé de 30 secondes n'est pas lié à Laravel mais à votre configuration PHP.

Voici comment vous pouvez le réparer. Le paramètre à modifier est 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)

Vous pouvez changer le max_execution_time en 300 secondes comme max_execution_time = 300

Vous pouvez trouver le chemin de votre fichier de configuration PHP dans le résultat de la fonction phpinfo de la section Loaded Configuration File.

36
Noman Ur Rehman

c'est une alternative pure PHP ... ... L'alternative consiste à augmenter la limite de temps d'exécution uniquement pour des scripts php spécifiques, en insérant par dessus ce fichier php:

ini_set('max_execution_time', 180); //3 minutes
30
Grigoreas P.

À Laravel:

Ajoutez la ligne set_time_limit (0) en haut de la requête.

set_time_limit(0);

$users = App\User::all();

Il vous aide dans différentes grandes requêtes mais vous devez améliorer l'optimisation de la requête. 

9
Umar Tariq

Parfois, vous avez juste besoin d'optimiser votre code ou votre requête. Définir plus de max_execution_time n'est pas une solution.

Un code ne doit pas être exécuté plus de 30 secondes.

2

Si vous utilisez PHP7, je vous conseillerais de changer la valeur par défaut dans public/.htaccess 

<IfModule php7_module>
   ...
   php_value max_execution_time 300
   ...
</IfModule>
1
Kwaye Kant

essayer

ini_set('max_execution_time', $time);
$articles = Article::all();

$time est en secondes, définissez-le sur 0 sans délai. assurez-vous de revenir 60 après la fin de votre fonction

0
karrar kazuya