PHP 中的实时进程执行和终止
本题探讨如何在网页上执行进程并实时接收其输出,无需等待该过程完成。问题的第二部分解决了如何在用户离开页面时终止此类进程。
在 PHP 中执行进程并流式传输其输出的一种方法是通过 proc_open() 函数。该函数允许创建一个可以独立于 PHP 父进程运行的子进程。为了方便实时输出,您可以指定 $descriptorspec 参数和适当的文件描述符来捕获进程的 stdout 和 stderr 流。
$cmd = "ping 127.0.0.1"; $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to ); flush(); $process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
子进程创建后,可以使用循环不断地捕获进程的 stdout 和 stderr 流。从 stdout 管道读取并打印输出。
echo "<pre class="brush:php;toolbar:false">"; if (is_resource($process)) { while ($s = fgets($pipes[1])) { print $s; flush(); } } echo "";
要在用户离开页面时终止子进程,可以使用 PHP shutdown 功能。关闭函数在 PHP 脚本终止时执行,这可能在用户关闭浏览器选项卡或离开页面时发生。在关闭函数中,可以对子进程句柄调用 proc_close() 来终止子进程。
register_shutdown_function(function() { proc_close($process); });
以上是如何执行和终止实时PHP进程?的详细内容。更多信息请关注PHP中文网其他相关文章!