2010-08-06 10 views
8

Ich habe PHP-Skripte, die Perl-Skripte aufrufen, um verschiedene Dinge zu tun und manchmal bekomme ich es, wo es einfach weiter und weiter geht, ohne eine Antwort zurück zu bekommen, dies basiert auf der Variablen, die an das Perl-Skript übergeben wird viele verschiedene nacheinander, so dass ich es nicht direkt debuggen kann, da ich keine Antwort von Perl habe ...Legen Sie eine Zeitüberschreitung für eine bestimmte Funktion/einen Codeblock (nicht das gesamte Skript) fest?

Ich würde wirklich gerne nur in der Lage sein, eine PHP-Funktion oder einen Block von Code auf Timeout nach einer bestimmten Anzahl von Sekunden .. Ich habe auf dieser Suche, habe aber noch nichts gefunden, wie dies zu tun,

Ich dachte, etwas wie das könnte funktionieren, aber ich denke nicht, dass es würde Aktualisieren Sie die Variable $ time dynamisch, aber vielleicht gibt es eine Möglichkeit, thi zu erhalten s arbeiten? Jede Beratung wird geschätzt

$time = time(); 
$timeout = $time + 5; //just as an example 

do { 

// do stuff 
} while ($time < $timeout) 
+0

Sie $ Zeit innerhalb der laufen während für es zu aktualisieren, aber wenn Ihr Anruf des Perl-Codes innerhalb der Weile ist, wird es nicht funktionieren, wenn das ein Anruf ist, der auf die Antwort davon wartet. – Prix

+0

yeah das ist das Problem dann, ich denke, es wartet auf die Rückkehr der Perl egal was – Rick

+0

Wenn Sie nicht wirklich über die Rückkehr Sie könnten es anders machen, machen Sie den Befehl wie: 'exec (" my_command_here>/dev/null 2> &1 &"); 'das wird deinen code auf dem hintergrund ausführen sende die ausgabe an ein schwarzes loch auf diese weise läuft dein php code weiter, aber du brauchst dann einen anderen ansatz um zu wissen ob das wetter beendet ist oder nicht ... du könntest zum Beispiel, mach deine Perl-Datei eine Datei mit 1 oder 0 darauf wie eine PID-Datei und du kannst sie von deiner Schleife aus steuern, wie du es wolltest. – Prix

Antwort

8

Ihre beste Wette wäre, zu verwenden proc_open, Schlaf für Ihren Timeout Menge und dann proc_terminate aufrufen, wenn der Prozess noch nicht abgeschlossen ist.

Weitere Informationen zur proc_ * -Familie finden Sie unter http://us3.php.net/manual/en/book.exec.php.

+0

Ich werde das untersuchen, aber ich brauche eine Rückkehr von Perl, Nur wenn ich die Rückkehr nicht innerhalb einer vernünftigen Zeitspanne gebe, habe ich keine Rückkehr, um es zu debuggen. Ich hatte vorher von proc_open gehört, war mir aber nicht sicher, ob ich eine Rückkehr davon bekommen könnte – Rick

0

Nun, ich bin nicht so sicher, dass diese Frage eine Antwort haben würde basierend darauf, wie ich es fragte, also was ich tun werde, ist der Perl-Anruf, wo PHP nicht auf eine Antwort warten und Perl schreiben die Ausgabe in eine Textdatei, dann php gelesen haben nach der angegebenen Anzahl von Sekunden, ich denke, das ist der einfachste Weg, dies zu tun, ist es nur für eine kleine App, die ich auf einem lokalen Server

Verwandte Themen