2017-11-17 2 views
0

Ich habe ein PHP-Skript, das ich von einem Browser ausführen muss. Innerhalb dieses Skript verwende ich exec() Funktion wie folgt aus:Server schließt die Verbindung, bevor die Exec-Funktion in meinem PHP-Skript fertig ausgeführt

exec("sudo scriptname 2>&1", $out); 

ich von diesem Skript zurückgegeben die Ausgabe zu halten $ möchten. Ich brauche die Ausgabe für die weitere Verarbeitung. Das Skript dauert ungefähr 2 Minuten. Das Problem ist, dass wenn ich das PHP-Skript im Browser ausführe, es für eine Minute läuft und dann stoppt. Aus diesem Grund stirbt das PHP-Skript und ich bekomme einen Fehler wie "Seite reagiert nicht".

Auf Chrom, zeigt der Bildschirm eine Fehlermeldung wie folgt aus:

ServerName.com unexpectedly closed the connection 
ERR_INCOMPLETE_CHUNKED_ENCODING 

Auf Mozilla, wird der Bildschirm leer wird (komplett weiß).

Nach dem Durchsuchen der Chrome-Fehler, glaube ich, dass der Webserver (ich Apache ausführen) die Verbindung wegen Inaktivität vom Client geschlossen, da das PHP-Skript wirklich nichts anderes tut, als auf die Funktion exec() zu warten beenden.

Ich habe versucht Einstellung max_execution_time, max_input_time, default_socket_timeout und verwendet set_time_limit (0) der Hoffnung, dass dies nicht das PHP-Skript töten könnte, aber es hat nicht funktioniert .

Ich möchte PTHREADS nicht verwenden, um zwei Threads zu generieren, wo man die exec() - Funktion ausführt und die andere überwacht oder den Server irgendwie beschäftigt hält.

Ich glaube, es gibt eine Einstellung in PHP oder Apache, die auf 60 Sekunden eingestellt ist, die die Verbindung vom Server beendet. Ich weiß einfach nicht was es ist.

Auch läuft das PHP-Skript perfekt, wenn ich das Skript innerhalb von exec() durch ein anderes, das weniger als eine Minute dauert, ersetze.

EDIT: Der Apache-Timeout-Wert ist auf 120 Sekunden festgelegt.

+0

Sie versuchen, PHP-Code in Ihrem Browser auszuführen? Wenn das nicht möglich ist, ist PHP Servercode und Sie benötigen JavaScript im Browser, um den Servercode auszuführen und die Antwort vom Server zurückzugeben. – Chris

+0

Wenn es in Apache ausgeführt wird, überprüfen Sie den Timeout-Wert. Dieser wird ebenfalls ausgelöst. Aber bedenken Sie, dass, wenn eine Website Sie für 2 Minuten warten lässt, Sie aufhören werden, Ihren Browser aktualisieren, die Website verlassen, ... Clients werden nicht 2 Minuten warten. – Nic3500

+0

Ich habe den Timeout-Wert in httpd.conf geprüft. Es sind 120 Sekunden. Also ich denke, das ist nicht das Problem. –

Antwort

0

Irgendwelche Chance sudo wartet auf Benutzername/Passwort-Eingabe und kommt nach 1 Minute?

+0

Nein. Ich habe Apache die Erlaubnis gegeben, das Skript ohne Passwort auszuführen. Ich habe das getestet. Wenn das nicht der Fall ist, wird das Skript sofort beendet und zeigt den Fehler 'tty required' an. –

Verwandte Themen