在 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中文网其他相关文章!