Shell-Befehle asynchron in PHP ausführen
Beim Ausführen von Shell-Skripten mit PHP ist es oft wünschenswert, asynchrone Vorgänge auszuführen, ohne die PHP-Ausführung zu blockieren. Dies kann besonders bei langwierigen Prozessen nützlich sein, die die PHP-Anfrage nicht verzögern sollen.
Während PHP verschiedene Funktionen für die Shell-Ausführung bietet, darunter exec(), shell_exec() und pcntl_fork(), liefert keine direkt das Gewünschte asynchrones Verhalten. Es gibt jedoch mehrere Ansätze, die es emulieren können.
Verwenden von Hintergrundprozessen mit '&'**
Wenn sich das PHP-Skript nicht mit der Ausgabe von befasst Wenn Sie ein Shell-Skript verwenden, kann es im Hintergrund mit dem &-Operator ausgeführt werden:
exec('path/to/script.sh &');
Dieser Befehl führt das Skript in einem separaten Prozess aus und kehrt sofort zu PHP zurück Skript, sodass die Ausführung fortgesetzt werden kann.
Standardausgabe und Fehler umleiten (/dev/null)
Um die Ausgabe des Shell-Skripts vollständig zu unterdrücken, muss das > /dev/null 2>/dev/null & expression kann an den Befehl exec() angehängt werden:
exec('path/to/script.sh > /dev/null 2>/dev/null &');
Dadurch werden sowohl die Standardausgabe (stdout) als auch die Standardfehlerausgabe (stderr) nach /dev/null umgeleitet , wodurch die Ausgabe des Skripts effektiv vor der PHP-Anfrage ausgeblendet wird.
Alternative Umleitung Syntax
Eine alternative Syntax zum Umleiten der Ausgabe ist die Verwendung von &> /dev/null &:
exec('path/to/script.sh &> /dev/null &');
Dies hat den gleichen Effekt wie > /dev/null-Syntax, kombiniert aber die Umleitung mit dem Hintergrund in einem einzigen Ausdruck.
Durch die Implementierung dieser Techniken können PHP-Skripte Shell-Skripte asynchron ausführen, sodass die PHP-Anfrage mit der Ausführung fortfahren kann, ohne auf das Shell-Skript warten zu müssen abgeschlossen.
Das obige ist der detaillierte Inhalt vonWie kann ich Shell-Befehle in PHP asynchron ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!