Schwerwiegender Fehler: Maximale Ausführungszeit von 30 Sekunden überschritten


397

Ich lade eine JSON-Datei von einer Online-Quelle herunter und wenn sie die Schleife durchläuft, wird folgende Fehlermeldung angezeigt:

Schwerwiegender Fehler: Die maximale Ausführungszeit von 30 Sekunden wurde in C: \ wamp \ www \ temp \ fetch.php in Zeile 24 überschritten


11
mögliches Duplikat der maximalen Ausführungszeit von 60 Sekunden überschritten, was bereits ein Duplikat von drei anderen ist. Bitte benutzen Sie die Suchfunktion, bevor Sie fragen.
Gordon

"Die Funktion set_time_limit () und die Konfigurationsanweisung max_execution_time wirken sich nur auf die Ausführungszeit des Skripts selbst aus. Jede Zeit, die für Aktivitäten außerhalb der Ausführung des Skripts aufgewendet wird, z. B. Systemaufrufe mit system (), Stream-Operationen, Datenbankabfragen usw. . ist nicht enthalten, wenn die maximale Zeit bestimmt wird, in der das Skript ausgeführt wurde. Dies gilt nicht für Windows "Aus PHP-Dokumentation
Jacob Sánchez

Antworten:


722

Ihre Schleife könnte endlos sein. Wenn dies nicht der Fall ist, können Sie die maximale Ausführungszeit folgendermaßen verlängern:

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

und

set_time_limit(300);

kann verwendet werden, um das Zeitlimit vorübergehend zu verlängern.


95
Mit set_time_limit (300) kann das Zeitlimit vorübergehend verlängert werden.
Omn

Ist dies nur für dieses eine Skript festgelegt oder wirkt es sich auf alle anderen Skripte aus, die nach diesem Skript auf demselben Server ausgeführt werden?
Rao

1
@ Rao ja, das wird nur für dieses eine Skript sein. Um es für alle Skripte zu erstellen, müssen Sie es in der Datei php.ini ändern. Sie können auch set_time_limit (0) ausführen. Wenn Sie möchten, dass das Skript für immer oder für eine lange Zeit ausgeführt wird
Haseeb

31
ini_set ('max_execution_time', 0); // keine Begrenzung
Junaid Atari

3
@sangam Ich würde sagen, es ist eine bewährte Methode, dieses Limit so niedrig wie möglich zu halten und gleichzeitig eine bestimmte Menge zusätzlichen Puffers zuzulassen. Aus Sicherheitsgründen möchte ich es nicht vollständig ausschalten. Es sollte vernünftig eingestellt werden. Ich habe es tatsächlich auf die doppelte Zeit eingestellt, die mein am längsten laufendes Skript für die Fertigstellung unter einem mittleren Server-Stresslevel benötigt. Trotzdem konnte es immer scheitern. Daher empfiehlt es sich auch, Timeout-Probleme für zeitaufwändige Skripte separat zu behandeln.
Hafenkranich

185

Ich hatte das gleiche Problem und löste es, indem ich den Wert für den Parameter max_execution_timein php.iniwie folgt änderte :

max_execution_time = 360      ; Maximum execution time of each script, in seconds (I CHANGED THIS VALUE)
max_input_time = 120          ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M           ; Maximum amount of memory a script may consume (128MB by default)

Ich hoffe das könnte dir helfen.


1
Aus irgendeinem Grund funktioniert ini_set nicht, aber das hilft auf jeden Fall!
Gabriel

php.inikann in gefunden werden /etc/php5/apache2/php.ini.... Ich benutze Ubuntu 13.04 ...
Enissay

Ich hatte das gleiche Problem bei der Installation von Moodle auf Wamp, löste jedoch die Konfiguration der Datei php.ini
Muhammad Irfan

1
Need to restart Apache nach dem Wechsel in der php.ini
spideringweb

[php7] - sudo nano /etc/php/7.0/apache2/php.ini
Chris Lambrou

46

Alle obigen Antworten sind richtig, aber ich benutze einen einfachen Weg, um dies in einigen Fällen zu vermeiden.

Setzen Sie diesen Befehl einfach in den Anfang Ihres Skripts:

set_time_limit(0);

9
Dies ist überhaupt nicht zu empfehlen
ich bin die dümmste Person

1
Das ausgeschaltete Zeitlimit schützt nicht vor Endlosschleifen. Richten Sie daher immer ein (größeres) Limit ein.
Bimlas

@IamtheMostStupidPerson Warum nicht? Wenn Sie es als localhost verwenden
Fernando Torres

23

Beim Upgrade auf WordPress 4.0 ist dieses Problem aufgetreten . Standardmäßig begrenzt WordPress die maximale Ausführungszeit auf 30 Sekunden.

Fügen Sie der .htaccess- Datei in Ihrem Stammverzeichnis Ihrer WordPress-Installation den folgenden Code hinzu, um die Standardeinstellung zu überschreiben.

php_value max_execution_time 300  //where 300 = 300 seconds = 5 minutes

18

Bearbeiten Sie die php.ini

Finden Sie diese Zeile:

max_execution_time

Ändern Sie den Wert auf 300:

max_execution_time = 300

300 bedeutet 5 Minuten Ausführungszeit für die http-Anforderung.


16

Ihr Skript läuft ab. Schauen Sie sich die Funktion set_time_limit () an, um die Ausführungszeit zu verlängern. Oder profilieren Sie das Skript, damit es schneller läuft :)


1
@HarshaMV Er bedeutet, ein Leistungsprofil zu verwenden, um festzustellen, warum das Skript anfangs langsam ist, und Ihren Code zu optimieren, um die Ausführungszeit zu verbessern. Dies kann je nach Engpass (CPU vs. Festplatten-E / A vs. Netzwerk) nützlich sein oder auch nicht.
Dan Bechard

12

Wenn all das bei Ihnen nicht funktioniert hat, fügen Sie .htaccessdem Verzeichnis, in dem sich Ihr Skript befindet , eine Datei hinzu und legen Sie diese ab

<IfModule mod_php5.c>
php_value post_max_size 200M
php_value upload_max_filesize 200M
php_value memory_limit 300M
php_value max_execution_time 259200
php_value max_input_time 259200
php_value session.gc_maxlifetime 1200
</IfModule>

Auf diese Weise habe ich mein Problem weder gelöst ini_set('max_execution_time', 86400);noch set_time_limit(86400)gelöst, aber die .htaccess-Methode hat es getan.


1
In meinem Fall funktioniert es. Vielen Dank. Ersetzen Sie M durch G für GB
Web_Developer

11

Wir können dieses Problem auf drei verschiedene Arten lösen.

1) Verwenden der Datei php.ini

2) Verwenden der .htaccess-Datei

3) Verwenden der Datei Wp-config.php (für Wordpress)


8

Sie können die Einschränkung aufheben, indem Sie sie auf Null setzen, indem Sie diese Zeile oben in Ihr Skript einfügen:

<?php ini_set('max_execution_time', 0); ?>

7

Folgen Sie dem Pfad /etc/php5(your php version)/apache2/php.ini.

Öffnen Sie es und stellen Sie den Wert max_execution_timeauf den gewünschten Wert ein.


Bei bestimmten Hosting-Anbietern müssen Sie möglicherweise auf /home
[

7

Überprüfen Sie möglicherweise, ob Sie in der Datei php.ini Änderungen vorgenommen haben. Zum Beispiel habe ich "; intl.default_locale =" in "; intl.default_locale = en_utf8" geändert, um die "Internationalization extension (Intl)" zu aktivieren, ohne die "extension = php_intl.dll" hinzuzufügen. Dann ist derselbe Fehler aufgetreten. Ich schlage daher vor, nach ähnlichen Fehlern zu suchen.



5

Um Ihre zu erweitern, können max_execution_timeSie entweder ini_setoder verwenden set_time_limit.

// Set maximum execution time to 10 seconds this way
ini_set('max_execution_time', 10);
// or this way
set_time_limit(10);

!! Beachten Sie jedoch, dass beide Funktionen neu gestartet werden und auch die Zeit gezählt wird, die das Skript bereits ausgeführt hat

sleep(2);
ini_set('max_execution_time', 5);

register_shutdown_function(function(){
    var_dump(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']);
});

for(;;);

//
// var_dump outputs float(7.1981489658356)
//

Wenn Sie also genau festlegen möchten, wie lange das Skript maximal ausgeführt werden kann, muss Ihr Befehl an erster Stelle stehen.

Unterschiede zwischen diesen beiden Funktionen sind

  • set_time_limit gibt keine Informationen zurück, ob es erfolgreich war, aber es wird eine Warnung bei einem Fehler ausgegeben.
  • ini_setGibt den alten Wert bei Erfolg zurück oder false bei einem Fehler ohne Warnung / Fehler

5

Sie können es einfach mit WHM tun. Ich muss gerade:

WHM -> Dienstkonfiguration -> PHP-Konfiguration

editor-> max_execution_time=30

(30 ist Standard, ändern Sie es auf den gewünschten Wert)


2

Ich habe das gleiche Problem in der WordPress-Site, ich habe in der .htaccess-Datei hinzugefügt, dann funktioniert es gut für mich.

php_value max_execution_time 6000000

0

Ich habe in meinem Fall einige Änderungen vorgenommen: xampp \ phpMyAdmin \ library \ config.default.php

Ich habe gesucht nach: $cfg['ExecTimeLimit'] und ändere den Wert auf der rechten Seite ...

Sie können den Wert für die rechte Hand in einen höheren Wert wie "5000" ändern . und es funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.