并行运行proc_open()命令 - PHP Linux

时间:2016-06-15 20:51:26

标签: php server pipeline ubuntu-server

我正在尝试从PHP运行ubuntu服务器上的进程,但是当你尝试打开多个选项卡时它似乎挂起,虽然它似乎可以在多个设备上运行。代码是:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

ini_set('output_buffering', 'off');
ini_set('zlib.output_compression', false);
ini_set('implicit_flush', true);
ob_implicit_flush(true);

while (ob_get_level() > 0) 
{
  $level = ob_get_level();
  ob_end_clean();
  if (ob_get_level() == $level) break;
}

if (function_exists('apache_setenv')) 
{
  apache_setenv('no-gzip', '1');
  apache_setenv('dont-vary', '1');
}

$command = 'ping -c 5 8.8.8.8';

$cwd = '/tmp';
$descriptorspec = 
[
  0 => ['pipe', 'r'],
  1 => ['pipe', 'w'],
  2 => ['pipe', 'w']
];

$process = proc_open($command, $descriptorspec, $pipes, $cwd);
$proc_details = proc_get_status($process);
$pid = $proc_details['pid'];
$_SESSION['upid'] = $pid;

if (is_resource($process)) 
{
  while ($s = fgets($pipes[1])) 
  {
    print $s;
    flush();
  }
}

这会产生运行ping命令并一次输出每行结果的预期效果,但是如果我打开另一个选项卡并运行它,第二个选项卡将不会运行,直到第一个选项卡中的命令结束。 / p>

如何阻止等待并让两个标签并行运行?

0 个答案:

没有答案