2016-05-22 6 views
0

Ich schreibe gerade ein PHP-Skript, das auf eine CSV-Datei auf einem Remote-Server zugreift, die Daten verarbeitet und dann Daten in die lokale MySQL-Datenbank schreibt. Da so viele Daten verarbeitet und in die Datenbank eingefügt werden müssen (50.000 Zeilen), dauert die Ausführung des Skripts länger als 60 Sekunden. Das Problem ist, dass das Skript nach 60 Sekunden abläuft.PHP Scripting Timing nach 60 Sekunden

Um sicherzustellen, dass es sich nicht um ein MySQL-Problem handelt, habe ich ein weiteres Skript erstellt, das in eine Endlosschleife übergeht und es auch nach 60 Sekunden ausgibt.

Ich habe versucht, zu erhöhen/Ändern Sie die folgenden Einstellungen auf dem Ubuntu-Server, aber es hat nicht geholfen: max_execution_time max_input_time mysql.connect_timeout default_socket_timeout der TimeOut-Wert in der apache2.conf Datei.

Könnte es möglicherweise ein Problem sein, weil ich von einem Webbrowser auf die PHP-Datei zugreife? Haben Webbrowser Zeitlimits?

Jede Hilfe wäre willkommen.

+0

Bitte überprüfen Sie diese [URL] (http://StackOverflow.com/Help) es wird nützlich sein, um Ihre Content-Qualität zu erhöhen –

+0

** UPDATE: ** Wenn ich das Skript ausführen, um die Datenbank zu aktualisieren, die PHP * * DOES ** ist tatsächlich abgeschlossen (dh alle Zeilen werden zur DB hinzugefügt), obwohl ich das Gateway-Timeout nach 60 Sekunden erhalte. Nachdem ich den Gateway-Timeout-Fehler erhalten habe, zeigen einige kurze Aktualisierungen der phpMyAdmin-Seite, dass das php-Skript noch ausgeführt wird, während die Anzahl der Zeilen in der Datenbank weiterhin steigt. Sicher bedeutet dies, dass es kein Problem mit PHP ist? –

Antwort

0

ich gearbeitet schließlich den Grund, warum die Anfrage mal aus

Für die Zukunft die eigentliche Datei von PHP-Apache verwendet zu finden. Das Problem liegt in einem virtuellen Server-Hosting.

Die Anfrage vom Webbrowser wird an den Hosting-Server gesendet, der dann die Anfrage an den virtuellen Server richtet (wirkt wie ein separater Server). Da der Hostserver nach 60 Sekunden keine Antwort vom virtuellen Server erhält, wird die Zeitüberschreitung abgebrochen und eine Antwort an den Webbrowser gesendet, in der genau dies angegeben wird. Währenddessen verarbeitet der virtuelle Server das Skript noch.

Wenn der virtuelle Server die Verarbeitung des Skripts beendet hat, ist es zu spät, da der Hostserver bereits einen Zeitüberschreitungsfehler an den Front-End-Benutzer zurückgegeben hat.

Da der Hosting-Server zum Hosten vieler virtueller Server (für mehrere verschiedene Benutzer) verwendet wird, ist es im Allgemeinen nicht möglich, die Timeout-Einstellungen auf diesem Server zu ändern.

Also, endgültige Urteil: Der Timeout-Fehler kann nicht mit virtuellem Hosting vermieden werden. Wenn dies ein ernstes Problem ist, müssen Sie möglicherweise nach dedizierten Server-Hosting suchen.

0

Michael,

Ihr Problem aus der PHP-Datei kommen sollte und nicht der Web-Browser darauf zugreifen.

Haben Sie versucht, die folgenden Zeilen am Anfang Ihrer PHP-Datei zu setzen?

set_time_limit(0); 
ini_set ('max_execution_time', 0); 

PHP hat 2 Konfigurationsdateien, eine für Apache und eine für CLI, was erklärt, warum, wenn das Skript in der Befehlszeile ausgeführt wird, Sie haben kein Timeout. Die phpinfo, die Sie mir gegeben haben, hat eine max_execution_time um 6000

Siehe set time limit documentation.

+0

Ja Ich habe set_time_limit() ohne Erfolg versucht. –

+0

Erstellen Sie eine neue Seite namens phpinfo.php, legen Sie nur drin und füge uns das Ergebnis ein. – TheWalkingPanda

+0

[Link zu HTML-Ausgabe] (https://www.dropbox.com/s/vwes4x5fdw24qvn/phpinfo%28%29.html?dl=0) Hier ist die Ausgabe von phpinfo() in einem separaten Skript. –

1

Die einfachste und am wenigsten aufdringliche Möglichkeit, diese Grenze zu überwinden, besteht darin, diese Zeile zu Ihrem Skript hinzuzufügen.

Dann sind Sie zur Änderung nur die Ausführungszeit für dieses Skript und nicht alle PHP-Skripte, die der Fall wäre, wenn Sie eine der 2 PHP.INI Dateien geändert

ini_set ('max_execution_time', -1); 

Wenn Sie das zu ändern versuchten php.ini Datei Ich würde vermuten, dass Sie die falsche Änderung, es gibt 2, eine verwendet nur die PHP-CLI und eine von PHP mit Apache verwendet. Sie einfach eine

<?php 
phpinfo(); 
?> 

Und sucht Loaded Configuration File

+0

danke für den Vorschlag aber das Ändern der max_execution_time hilft nicht. Wie bereits erwähnt, habe ich bereits versucht, die verschiedenen Timeout-Variablen zu ändern, die im ursprünglichen Beitrag erwähnt wurden. Ich glaube, dass sie erfolgreich geändert werden, wenn ich phpinfo() starte, werden alle Werte aktualisiert. –

+0

Ist es möglich, das Skript über die Befehlszeile auszuführen? Es gibt kein Limit, wenn es mit der CLI ausgeführt wird. – RiggsFolly

+0

Gibt es noch andere Informationen im 'php error log'? – RiggsFolly