Php 在运行耗时的命令之前输出HTML文件的一部分

Php 在运行耗时的命令之前输出HTML文件的一部分,php,output-buffering,Php,Output Buffering,我试图在PHP中使用输出缓冲区来更新网页的界面 简化的HTML结构如下所示: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <h1>Some Header Here</h1> <?php ob_implicit_flush(true); $buffer = str_repeat(&q

我试图在PHP中使用输出缓冲区来更新网页的界面

简化的HTML结构如下所示:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<h1>Some Header Here</h1>
<?php
ob_implicit_flush(true);
$buffer = str_repeat(" ", 4096)."\r\n<span></span>\r\n"; // to ensure the browser to print ("flush") the output
ob_start();

echo '<p>Start operation</p>' . $buffer . PHP_EOL;
ob_flush(); flush(); ob_clean();

$response = shell_exec('a_long_running_command1'); // which will execute for around 3 minutes
echo '<p>Command 1 Response: ' . $response . '</p>' . PHP_EOL;
ob_flush(); flush(); ob_clean();

$response = shell_exec('a_long_running_command2'); // which will execute for around 5 minutes
echo '<p>Command 2 Response: ' . $response . '</p>' . PHP_EOL;
ob_flush(); flush(); ob_clean();

ob_end_flush();
echo '<p>Task Complete</p>' . PHP_EOL;
?>
</body>
</html>

这里有一些标题
而命令1和命令2是在基于Linux的服务器上运行的CPU密集型任务

但是,一旦进入页面,页面将为空白(浏览器(Chrome)指示它将继续加载),直到命令1完成。如何首先显示第一个
标题和“启动操作”标题

还有一个贪婪的问题:我是否可以在页面上显示经过的时间,以便用户知道命令仍在运行


我知道我可以通过AJAX调用实现这一点,但我不希望用户:

  • 刷新页面(这可能导致为服务器中的多个实例运行命令1和2)
  • 了解AJAX调用,以便他可以重播AJAX调用