在各種 PHP 應用程式中,需要非同步執行 shell 腳本,而不影響主請求的效能。手邊的任務涉及呼叫執行 SOAP 呼叫的 shell 腳本,這可能非常耗時。但是,PHP 腳本不應該等待 shell 進程完成。
探索性努力
最初考慮的是 exec() 和 shell_exec() 等函數。然而,它們都沒有提供所需的非阻塞行為。
使用後台的非同步呼叫
這個難題的解決方案在於使用 '& 將 shell 腳本置於後台' 操作員。透過在 exec 命令後附加 '&',shell 腳本將作為後台進程執行,從而允許 PHP 請求不受阻礙地繼續執行。
exec("sh script.sh &");
重定向輸出和錯誤流
在某些情況下,可能需要抑制 shell 腳本的標準輸出和錯誤流。這可以透過使用以下語法將它們重新導向到/dev/null 來實現:
exec("sh script.sh & > /dev/null 2> /dev/null");
重定向的替代方案
或者,輸出和錯誤流可以是使用「>」在單一運算中重定向運算子後面跟著兩個與號(&)。
exec("sh script.sh & >& /dev/null");
此方法為串流重定向提供了簡潔且可讀的解決方案。
附加說明
請務必注意,「&」運算符的行為可能因作業系統和 PHP 版本而異。建議在特定目標環境中測試該解決方案是否正常運作。
以上是如何在 PHP 中非同步執行 Shell 腳本而不阻塞主請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!