2012-08-17 10 views
21

Ich habe ein Problem mit meiner PHP-Datei, die mehr als 30 Sekunden dauert, um auszuführen.php Zeitüberschreitung - set_time_limit (0); - arbeite nicht

Nach der Suche habe ich am Anfang des Codes set_time_limit(0); hinzugefügt, aber die Datei noch nach 30 Sekunden mit einer 500 error Timeout.

log: PHP Fatal error: Maximum execution time of 30 seconds exceeded in /xxx/xx/xxx.php 

safe-mode : off 
+4

Sind Sie auf Shared Hosting? PHP-Funktionen können selektiv durch Serverkonfiguration deaktiviert/eingeschränkt werden. –

+1

können Sie echo ini_get ('max_execution_time'); 'nach Ihrer' set_time_limit (0); 'und sagen, was Sie bekommen? – Prasanth

+0

Es gibt möglicherweise "php_admin_value max_execution_time XX" in httpd.conf festgelegt. Sie können diesen Wert also nicht überschreiben. – verybadbug

Antwort

21

Überprüfen Sie die php.ini

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

ini_set('max_execution_time', 0); //0=NOLIMIT 
+3

Verstehen Sie auch, dass, wie Marc B. sagte, möglicherweise Einschränkungen auf einem freigegebenen Host vorhanden sind, also wenn diese Funktionen nicht so funktionieren wie sie sollten, fragen Sie einen Admin des Servers –

+0

@Marc B Nein, ich bin eingeschaltet dedizierter Server – user614963

+1

@goldenparrot echo ini_get ('max_execution_time'); = 0 – user614963

2
ini_set('max_execution_time', 300); 

Verwendung dieses

1

Kasse diese, diese von PHP MANUAL ist, diese Ihnen helfen können.

Wenn Sie PHP_CLI SAPI verwenden und den Fehler "Maximale Ausführungszeit von N Sekunden überschritten" erhalten, wobei N ein ganzzahliger Wert ist, versuchen Sie set_time_limit (0) alle M Sekunden oder jede Iteration aufzurufen. Zum Beispiel:

<?php 

require_once('db.php'); 

$stmt = $db->query($sql); 

while ($row = $stmt->fetchRow()) { 
    set_time_limit(0); 
    // your code here 
} 

?> 
+0

Warte ... Was? Nein?'set_time_limit()': A) Setzt den Timer bei jedem Anruf zurück (gut, und ich sehe, wohin du gehst). B) legt kein Zeitlimit fest, wenn 0 gesetzt ist. Also ... Nein ... – Mike

+0

Dies sollte als die richtige Antwort markiert werden. Höchstwahrscheinlich werden Sie Schleifen verwenden und der Befehl set_time_limit (0) sollte sich an der Spitze der Schleife befinden, die das Zeitlimit verursacht. Der Parameter 0 bedeutet, dass kein Zeitlimit auferlegt wird (wie im Handbuch beschrieben). Daher kann das Skript bis zum Abschluss ausgeführt werden. Wenn Ihr Skript jedoch länger als 30 Sekunden dauert, möchten Sie vielleicht noch einmal nachdenken, wie Sie vorgehen? – kurdtpage

3

ich in der Regel set_time_limit (30) innerhalb der Hauptschleife verwenden (so jede Schleife Iteration wird auf 30 Sekunden begrenzt, anstatt das gesamte Skript).

Ich mache dies in mehreren Datenbank-Update-Skripten, die routinemäßig einige Minuten dauern, aber weniger als eine Sekunde für jede Iteration - das Halten der 30-Sekunden-Grenze bedeutet, dass das Skript nicht in einer Endlosschleife stecken bleibt, wenn ich dumm bin genug, um eins zu erstellen.

Ich muss zugeben, dass meine Wahl von 30 Sekunden für das Limit etwas willkürlich ist - meine Skripte könnten tatsächlich mit 2 Sekunden davonkommen, aber ich fühle mich wohler mit 30 Sekunden angesichts der tatsächlichen Anwendung - natürlich könnten Sie was auch immer verwenden Wert, den Sie fühlen, ist geeignet.

Hoffe, das hilft!

5

Dies ist ein alter Thread, aber ich dachte, ich würde dies link posten, da es mir ziemlich viel zu diesem Thema geholfen hat. Im Wesentlichen ist es, dass die Serverkonfiguration die PHP-Konfiguration überschreiben kann. Aus dem Artikel:

Zum Beispiel hat mod_fastcgi eine Option namens "-idle-timeout", die die Leerlaufzeit des Skripts steuert. Wenn also das Skript für einige Sekunden nichts an den Fastcgi-Handler ausgibt, würde fastcgi es beenden. Der Aufbau ist so etwas wie folgt aus:

Apache <-> mod_fastcgi <-> php processes 

Der Artikel weitere Beispiele und eine weitere Erklärung hat. Hoffe das hilft jemand anderem.

Verwandte Themen