PHP-Skript beendet wird willkürlich mit keine Fehler
Ich habe ein PHP-Skript, das schien beendet, nach etwa 20 Minuten.
Versuchen, herauszufinden, warum ich ein sehr einfaches Skript, um zu sehen, wie lange es laufen würde, ohne komplexen code zu verwirren mich.
Fand ich, dass die gleiche Sache geschehen war, mit diesem einfachen Endlosschleife. Irgendwann zwischen 15 und 25 Minuten laufen, hält es ohne jede Meldung oder Fehlermeldung. Der browser sagt "Fertig".
Ich habe über jeden einzelnen möglich, was ich denken konnte:
set_time_limit ( session.gc_maxlifetime in the php.ini)
memory_limit
max_execution_time
Dem Punkt, dass das Skript beendet wird, ist nicht konsistent. Manchmal ist es halt bei 15 Minuten, manchmal 22 Minuten.
Bitte, jede Hilfe wäre sehr geschätzt werden.
Es ist gehostet auf einem 1and1
server. Ich kontaktierte Sie, und Sie bieten keinen support für Fehler verursacht durch den Entwickler.
- Sie können möglicherweise erzeugen Sie einen separaten Prozess mit
exec()
. Versuchen zu halten, ein script läuft über 30 Minuten mit dem direkten Aufruf durch den browser ist der Wahnsinn. - Hast du Zugriff auf die error und access logs vom server? Sie sind wahrscheinlich, um Ihnen mehr Informationen über das, was passiert in diesem Fall. Auch können Sie das problem reproduzieren lokal? Das könnte Ihnen einige weitere Optionen, soweit das debugging geht.
- Nee, ich habe keinen Zugriff auf die logs. Das ist eine Sache, die wirklich macht mich verrückt. Ich machte eine benutzerdefinierte PHP-error-log csv-Datei, aber keine nützliche PHP-Fehler :-/ ich habe es noch nicht getestet lokal, da es so lange braucht, um das herauszufinden. Ich denke, wenn es nicht richtig läuft, dann ist es eine obskure Einstellung server ich habe keine Ahnung, oder wenn es beendet ist, dann ist es eine obskure browser-problem, das ich keine Ahnung habe. Entweder Weg, es hilft nicht viel. Ich werde versuchen James ' Rat oben, obwohl, das scheint sinnvoll. Andere Ideen, obwohl in der Zwischenzeit?
- Naja, es läuft lokal würde Ihnen erlauben, zu prüfen, die server-logs. Tritt es nur in einem bestimmten browser? Ich besorge, es nicht, und ich habe das Gefühl, Ihr Problem in Zusammenhang mit der Speichernutzung oder vielleicht verursachen PHP segmentation Fault (die Sie sollten in der Lage sein, um zu sehen, in den server-logs)
- Was Sie tun können, ist geben Sie in Ihrem Skript machen ini_set: 1) log_errors auf on 2) error_log Sie können zu einer Datei, die dir, wie error_log = ./php.Protokoll führen Sie Dann das Skript, dann pull-up-FTP (die im vorausgesetzt, Sie haben) und die Datei Auschecken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Irgendwann Ihre browser mal aus und beendet das laden der Seite. Wenn Sie testen möchten, öffnen Sie die Befehlszeile, und führen Sie den code in es. Das Skript soll auf unbestimmte Zeit laufen.
Haben Sie in Betracht gezogen, nur läuft das script von der Kommandozeile aus, z.B.:
haben und das Skript Spülen eine Fehlermeldung jedes so oft, dass es noch läuft:
in solchen Fällen Wende ich mich an alle die Entwicklung Einstellungen in php.ini natürlich auf einem Entwicklungs-server. Diese Anzeige viele mehr-Nachrichten, einschließlich der deprecation-Warnungen.
Meiner Erfahrung debugging lang laufende php-Skripte, die häufigste Ursache war die memory allocation-Fehler (Fatal error: Allowed memory size of xxxx bytes exhausted...)
Ich denke, dass das, was Sie brauchen, um herauszufinden, die genaue Zeit, die es anhält (Sie können eine erste Zeit und halten dumping aus der aktuellen Zeit minus erste). Es ist etwas auf der server-Seite, stoppen Sie die Datei. Auch erwägen Sie eine ini_get prüfen, um sicherzustellen, dass die Ausführungszeit ist tatsächlich 0. Wenn Sie möchten, legen Sie das Zeitlimit auf 30 und dann JEDE Schleife, die Sie machen, fahren Sie Fort, indem Sie am 30. Bei jedem Aufruf set_time_limit, wird der Zähler zurückgesetzt, und dies könnte Ihnen ermöglichen, zu umgehen, um den tatsächlichen Grenzen. Wenn dies immer noch nicht funktioniert, es ist etwas auf 1und1 Servern töten könnte das Skript.
Außerdem haben Sie versucht, das ignore_user_abort?
Ich Schätze jeder ' s Kommentare. Vor allem James Hartig ' s, Sie waren sehr hilfreich und hat mich auf den richtigen Weg.
Ich weiß noch nicht, was das problem war. Ich habe es zur Ausführung auf dem server mit SSH, nur durch die Verwendung der exec () - Befehl als auch das ignore_user_abort(). Wäre aber trotzdem mal aus.
So, ich hatte gerade zu brechen es in kleine Stücke, die ausgeführt wird, nur für etwa 2 Minuten, und verwenden Sie session-Variablen/arrays zum speichern, wo ich aufgehört habe.
Ich bin froh, getan zu werden, mit dieser relativ einfachen Projekt jetzt, und bin extrem Sauer auf 1und1. Naja...
Ich denke, dies wird verursacht durch ein Prozess-monitor das töten von "zombie-Prozesse", um zu ermöglichen Ressourcen für andere Benutzer.
Führen Sie die exec mit "2>&1" zu melden alles inklusive stderr.
In meiner Ausgabe konnte ich erwischen:
So etwas (eine externe Kraft, nicht von PHP selbst) zu töten ist, meinen Prozess!
Benutze ich IdWebSpace die ausgezeichnete BTW aber ich denke, die meisten shared-hosting-Provider aufzuerlegen, die diese Ressource/Prozess-control-Mechanismus, einfach nur gesund.