proc_open to właściwy wybór, ponieważ @ChristopherMorrissey zauważył. Chciałbym trochę tutaj opracować, ponieważ istnieją pewne zastrzeżenia do używania proc_open, które nie są całkowicie oczywiste.
W pierwszym przykładzie kodu @http://php.net/manual/en/function.proc-open.php pokazuje ogólne użycie i odwołam się do tego.
Pierwsze zastrzeżenie dotyczy rur. Rury są strumieniami plików w PHP, które prowadzą do STDIN, STDOUT i STDERR procesu potomnego. W tym przykładzie indeks potoku 0 reprezentuje strumień plików z perspektywy nadrzędnych procesów PHP. Jeśli proces nadrzędny zapisuje do tego strumienia, pojawi się jako wejście STDIN do procesu potomnego.
W systemach operacyjnych zgodnych z POSIX, STDIN do procesu musi zostać zamknięty, aby proces mógł zostać zakończony. Bardzo ważne jest, aby wywoływać fclose na rurze od rodzica, lub proces twojego dziecka zostanie zablokowany. Odbywa się to w tym wierszu w przykładzie:
fclose($pipes[0]);
Drugim zastrzeżeniem jest sprawdzenie kodu wyjścia procesu potomnego. Sprawdzanie kodu wyjścia jest najlepszym sposobem określenia, czy proces potomny zakończył się poprawnie, czy też został błędny. Przynajmniej musisz po prostu wiedzieć, kiedy proces podrzędny został zakończony.Sprawdzenie tego i kod wyjścia są zarówno wykonane z http://www.php.net/manual/en/function.proc-get-status.php
Jeśli chcesz upewnić się, że proces wychodzi poprawnie, trzeba będzie spojrzeć na polu exitcode
zwrócony w tablicy z proc_get_status. Pamiętaj, że ten kod wyjścia zwróci prawidłową wartość tylko raz. Za każdym razem zwróci -1. Tak więc, gdy tylko wróci> -1, jest to twój aktualny kod wyjścia. Tak więc po raz pierwszy running
== false, sprawdź exitcode
.
Mam nadzieję, że to pomoże.
proc_open? http://php.net/manual/en/function.proc-open.php – cmorrissey
sprawdź najpopularniejszą odpowiedź tutaj: http://stackoverflow.com/questions/3819398/php-exec-command-lub-similar- to-not-wait-for-result –
@brian To jest PHP niezależne od platformy. Zatem używanie basha lub/dev nie jest opcją. – Sam