PHP-Skript Mal nach 45 Sekunden
Ich bin eine große import in meine Datenbank(über 200k Datensätze) und ich habe ein ernstes Problem mit meinem import-Skript eine Zeitüberschreitung Eintritt. Ich benutzte mein Handy als Stoppuhr und fand, dass es mal bei genau 45 Sekunden, jeder Durchgang(internal server error)... es macht nur etwa 200 Datensätze gleichzeitig, manchmal weniger. Ich scannte meine phpinfo() und nichts ist auf 45 Sekunden; also, ich bin ratlos, warum es wäre, dies zu tun.
Meine max_execution_time ist auf 5 Minuten gesetzt und meine max_input_time 60 Sekunden festgelegt ist. Ich habe auch versucht die Einstellung set_time_limit(0); ignore_user_abort(1); an der Spitze meiner Seite aber es hat nicht funktioniert.
Kann es auch hilfreich sein, zu beachten, dass mein Fehler-Datei liest: "Vorzeitiges Ende der Skript-Header" wie bei der Ausführung Fehler.
Jede Hilfe wird sehr geschätzt.
- irgendwelche Fehlermeldungen? hast du error_reporting(-1) aktiviert haben, tun Sie?
- Nur fügte hinzu, dass ein Bearbeiten, wenn Sie dies gepostet 🙂 Eine Fehlermeldung: "Premature end of script headers"
- Möglich, Duplikat der Vorzeitiges Ende der Skript-Header: index.php, mod_fcgid: read data timeout in 61 Sekunden
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe versucht, alle Lösungen auf dieser Seite und, natürlich, die über die Befehlszeile ausgeführt:
als Brent sagt, ist der sinnvolle Weg um Sie herum.
Aber wenn Sie wirklich möchten, führen Sie ein Skript aus Ihrem browser, hält das timing nach 45 Sekunden mit einem 500 internal server error (wie ich beim Umbau meines phpBB-Suche index), dann gibt es eine gute chance, es wird verursacht durch mod_fcgid.
Ich habe einen Plesk VPS und ich habe es behoben, indem Sie die Datei
Konkret habe ich geändert
zu
3600 Sekunden = 1 Stunde. Sollte lang genug sein für die meisten aber nach oben anzupassen, falls erforderlich. Ich sah ein Beispiel zu zitieren 7200 Sekunden drin.
Den Apachen neu starten, damit die neue Einstellung aktiv.
HTH jemand. Es wurde nervt mich seit 6 Monaten jetzt!
Cheers,
Reich
Es ist durchaus möglich, dass Sie auf ein erzwungenes limit der Ressourcen auf Ihrem server, vor allem, wenn der server nicht voll unter Ihrer Kontrolle.
Vorausgesetzt, es ist irgendeine Art von Linux-server können Sie Ihre Ressourcen-limits mit
ulimit -a
auf der Kommandozeile.ulimit -t
wird auch zeigen Ihnen die Grenzen auf cpu-Zeit.Wenn die cpu begrenzt ist, haben Sie vielleicht, um Ihre import-batches.
ulimit -t
und sehen, was Sie bekommen.Erste, Sie sollte ausgeführt werden, das script von der Kommandozeile aus, wenn es sich auf eine Weile dauern. Zumindest Ihre browser-timeout nach 2 Minuten, wenn er erhält keine Inhalte.
Aber wenn Sie ausführen müssen, um es aus dem browser versuchen add header("Content-type: text/html") vor dem import kicks.
Wenn Sie auf einem shared host, dann ist es möglich, es gibt Einschränkungen auf dem system, wenn lang andauernde Abfragen und/oder Skripte werden automatisch getötet, nachdem eine bestimmte Länge der Zeit. Diese Einschränkungen sind in der Regel gelockert, die für nicht-web-Skripte. So läuft es von der Kommandozeile helfen würde.
Den 45 Sekunden könnte ein Zufall sein -- es könnte sein, wie lange es dauert, Sie zu erreichen, das memory limit.. die Erhöhung des memory limit wäre wie:
Könnte es auch sein, die eigentliche db Verbindung, ist das timing raus.. was db-server verwenden Sie?
Für mich, mssql mal mit extrem wenig hilfreichen Fehlermeldung "Datenbank-Kontext geändert", nach 60 Sekunden standardmäßig. Um dies zu umgehen, können Sie tun:
Zunächst
funktioniert nur mit VPS oder dedizierte Server . Stattdessen können Sie Folgen einige Regeln für Ihre Umsetzung wie unten