2012-04-04 5 views
2

Angesichts der folgenden PHP-Code aufgehört hat ...: Wie zu sehen, wenn Prozess

<?php 
    exec('myscript.php'); 
    exec('finish.php'); 
?> 

Gibt es eine Möglichkeit zu sagen, wenn myscript.php mehr läuft?

Ich möchte verhindern, dass finish.php ausgeführt wird, bis myscript.php abgeschlossen ist.

Antwort

2

Die exec() -Aufrufe werden blockiert, bis der externe Job abgeschlossen ist. Wenn Sie nicht einen der myscript-Aufrufe im Hintergrund ausführen, wird finish.php nie ausgeführt, solange myscript.php ist. Diese

0
$output = shell_exec("myscript.php"); 

ist nur eine Vermutung, aber ich bin bereit zu wetten, werden Ausführungsfehler sehen. Dies liegt wahrscheinlich daran, dass myscript.php nicht die benötigte Knallzeile (#!/Usr/bin/php) und + x Flag zur Ausführung hat.

* UPDATE *

Alternativ scheint es, wie kann man nur

include("myscript.php"); 
include("finish.php"); 

Dies wird zur Folge haben, die Sie suchen. Wenn Sie diese tatsächlich außerhalb des laufenden Prozesses ausführen möchten, lesen Sie meinen obigen Kommentar zur Bang-Linie und machen Sie die Skripte ausführbar.

0

Gibt es eine Möglichkeit zu sagen, wenn myscript.php nicht mehr läuft?

Wenn finish.php ausgeführt wird, ist die Ausführung von myscript.php beendet. Wenn es sich um einen Hintergrundprozess handelt, könnten Sie zum Beispiel etwas "Hacky" wie das Erstellen einer Datei machen, wenn myscript.php fertig ist, und überprüfen Sie das.

Von the docs:

Wenn ein Programm mit dieser Funktion gestartet wird, um es im Hintergrund, die Ausgabe des Programms weiter ausgeführt werden müssen, um eine Datei oder einen anderen Ausgabestrom umgeleitet werden. Andernfalls wird PHP hängen bleiben, bis die Ausführung des Programms beendet wird.

0

Ich würde Ihnen empfehlen, proc_open zu verwenden, da es viel mehr Flexibilität bietet. Sie sollten auch beachten, dass im Falle von exec() der zweite nur aufgerufen wird, nachdem der erste beendet wurde.