PHP でのシェル コマンドの非同期実行
PHP を使用してシェル スクリプトを実行する場合、多くの場合、PHP の実行をブロックせずに非同期操作を実行することが望ましいです。これは、PHP リクエストを遅らせる必要のない長時間のプロセスに特に役立ちます。
PHP には、exec()、shell_exec()、pcntl_fork() などのシェル実行用のさまざまな関数が用意されていますが、必要な関数を直接提供するものはありません。非同期動作。ただし、これをエミュレートできるアプローチがいくつかあります。
'&'**
でバックグラウンド プロセスを使用する PHP スクリプトが、シェル スクリプトの場合、& 演算子を使用してバックグラウンドで実行できます:
exec('path/to/script.sh &');
このコマンドは、別のプロセスでスクリプトを実行します。すぐに PHP スクリプトに戻り、実行を継続できます。
標準出力とエラー (/dev/null) のリダイレクト
からの出力を完全に抑制するにはシェルスクリプト、> /dev/null 2>/dev/null & 式は exec() コマンドに追加できます:
exec('path/to/script.sh > /dev/null 2>/dev/null &');
これにより、標準出力 (stdout) と標準エラー (stderr) の両方が /dev/null にリダイレクトされます。 、PHP リクエストからスクリプトの出力を効果的に隠します。
代替リダイレクト構文
出力をリダイレクトするための代替構文は、&> を使用することです。 /dev/null &:
exec('path/to/script.sh &> /dev/null &');
これは > と同じ効果があります。 /dev/null 構文は使用されますが、単一の式でリダイレクトとバックグラウンドを組み合わせます。
これらの手法を実装すると、PHP スクリプトはシェル スクリプトを非同期で実行できるようになり、シェル スクリプトの実行を待たずに PHP リクエストの実行を継続できるようになります。完了しました。
以上がPHP でシェル コマンドを非同期に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。