在PHP 中非同步執行Shell 指令
使用PHP 執行shell 腳本時,通常希望在不阻塞PHP 執行的情況下執行非同步操作。這對於不應延遲 PHP 請求的冗長進程特別有用。
雖然 PHP 提供了各種用於 shell 執行的函數,包括 exec()、shell_exec() 和 pcntl_fork(),但沒有一個直接提供所需的功能異步行為。但是,有幾種方法可以模擬它。
使用帶有'&' 的後台進程**
如果PHP 腳本不關心來自shell 腳本,可以使用& 運算子在後台執行:
exec('path/to/script.sh &');
該指令在單獨的進程中立即執行腳本返回PHP 腳本,允許其繼續執行。
重定向標準輸出與錯誤(/dev/null)
完全抑制shell 腳本的輸出、> /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 腳本可以非同步執行 shell 腳本,允許 PHP 請求繼續執行,而無需等待 shell 腳本完成。
以上是如何在 PHP 中非同步執行 Shell 指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!