ホームページ >バックエンド開発 >PHPチュートリアル >メインリクエストをブロックせずに、PHP でシェルスクリプトを非同期に実行するにはどうすればよいですか?

メインリクエストをブロックせずに、PHP でシェルスクリプトを非同期に実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-19 02:30:13425ブラウズ

How Can I Execute Shell Scripts Asynchronously in PHP Without Blocking the Main Request?

PHP の非同期シェル実行: 同時実行性の解放

さまざまな PHP アプリケーションでは、メイン リクエストのパフォーマンスを妨げることなく、シェル スクリプトを非同期で実行する必要が生じます。ここでのタスクには、SOAP 呼び出しを実行するシェル スクリプトの呼び出しが含まれますが、これには時間がかかる場合があります。ただし、PHP スクリプトはシェル プロセスの完了を待つべきではありません。

探索的な取り組み

当初は、exec() やshell_exec() などの関数が検討されました。ただし、どれも望ましい非ブロッキング動作を提供しません。

バックグラウンド処理を使用した非同期呼び出し

この難問の解決策は、'& を使用してシェル スクリプトをバックグラウンド化することにあります。 ' 演算子。 exec コマンドに「&」を追加すると、シェル スクリプトがバックグラウンド プロセスとして実行され、PHP リクエストが妨げられることなく実行を継続できるようになります。

exec("sh script.sh &");

出力ストリームとエラー ストリームのリダイレクト

特定のシナリオでは、シェル スクリプトからの標準出力とエラー ストリームの両方を抑制することが望ましい場合があります。これは、次の構文を使用して /dev/null にリダイレクトすることで実現できます。

exec("sh script.sh & > /dev/null 2> /dev/null");

リダイレクトの代替手段

あるいは、出力ストリームとエラー ストリームを次のようにすることもできます。 「>」を使用した 1 回の操作でリダイレクトされます。演算子の後に 2 つのアンパサンド (&) が続きます。

exec("sh script.sh & >& /dev/null");

このアプローチは、ストリーム リダイレクトに対する簡潔で読みやすいソリューションを提供します。

追加メモ

「&」演算子の動作はオペレーティング システムや PHP のバージョンによって異なる場合があることに注意することが重要です。適切に動作するかどうか、特定のターゲット環境でソリューションをテストすることをお勧めします。

以上がメインリクエストをブロックせずに、PHP でシェルスクリプトを非同期に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。