Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich Shell-Skripte asynchron in PHP ausführen, ohne die Hauptanforderung zu blockieren?
In verschiedenen PHP-Anwendungen besteht die Notwendigkeit, Shell-Skripte asynchron auszuführen, ohne die Leistung der Hauptanforderung zu beeinträchtigen. Die anstehende Aufgabe besteht darin, ein Shell-Skript aufzurufen, das SOAP-Aufrufe ausführt, was zeitaufwändig sein kann. Das PHP-Skript sollte jedoch nicht auf den Abschluss des Shell-Prozesses warten.
Explorationsbemühungen
Zunächst wurden Funktionen wie exec() und shell_exec() in Betracht gezogen. Keines davon bietet jedoch das gewünschte nicht blockierende Verhalten.
Asynchroner Aufruf mit Hintergrundfunktion
Eine Lösung für dieses Rätsel besteht darin, das Shell-Skript mit dem '& 'Operator. Durch Anhängen von „&“ an den exec-Befehl wird das Shell-Skript als Hintergrundprozess ausgeführt, sodass die PHP-Anfrage ungehindert weiter ausgeführt werden kann.
exec("sh script.sh &");
Ausgabe- und Fehlerströme umleiten
In bestimmten Szenarien kann es wünschenswert sein, sowohl die Standardausgabe als auch die Fehlerströme des Shell-Skripts zu unterdrücken. Dies kann erreicht werden, indem sie mithilfe der folgenden Syntax nach /dev/null umgeleitet werden:
exec("sh script.sh & > /dev/null 2> /dev/null");
Alternativen zur Umleitung
Alternativ können die Ausgabe- und Fehlerströme sein in einem einzigen Vorgang mit der Funktion „>“ umgeleitet werden. Operator gefolgt von zwei kaufmännischen Und-Zeichen (&).
exec("sh script.sh & >& /dev/null");
Dieser Ansatz bietet eine prägnante und lesbare Lösung für die Stream-Umleitung.
Zusätzliche Hinweise
Es ist wichtig zu beachten, dass das Verhalten des Operators „&“ je nach Betriebssystem und PHP-Version unterschiedlich sein kann. Es wird empfohlen, die Lösung in der spezifischen Zielumgebung auf ordnungsgemäße Funktion zu testen.
Das obige ist der detaillierte Inhalt vonWie kann ich Shell-Skripte asynchron in PHP ausführen, ohne die Hauptanforderung zu blockieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!