首先..我的PHP知识非常差。
目标是通过网页显示bash脚本的实时内容。 bash脚本本身具有三个任务:
所有作品...但是显示的内容不是我期望的。 更精确的是:时间顺序
bin文件会产生大量不需要的信息。所以我用grep和sed过滤内容:
如果我不使用“ grep”和“ sed”进行过滤...输出是实时的。
如果我使用“ grep”和“ sed” .... bin文件的输出仅在执行后显示。
Timecode 0s: Hello
Timecode 17: Generating Baseline: 1/9 4000/4000 6.586
Timecode 17: Generating Agi: 2/9 4000/4000 6.563
Timecode 17: Generating AP: 3/9 4000/4000 6.567
这就是输出的样子:
Timecode 0s: Hello
Timecode 4: Generating Baseline: 1/9 4000/4000 6.586
Timecode 6: Generating Agi: 2/9 4000/4000 6.563
Timecode 10: Generating AP: 3/9 4000/4000 6.56
为什么? 我如何解决此问题...过滤“ simc”的输出并实时转发输出?
代码:
bash脚本部分:
#!/bin/bash
echo "Hello"
simc $PLAYER $COMMAND html=/tmp/report_manual.html | grep --line-buffered "Generating" | sed 's/\[.*\]//g'
exit
php脚本部分:
<?php
ob_end_flush();
ob_implicit_flush();
$char_name = $_POST["char_name"];
$cmd = "bash /home/nas/script/simc/webclient.sh {$char_name} 2>&1";
while (@ ob_end_flush()); // end all output buffers if any
$proc = popen($cmd ,'r');
echo '<pre>';
while (!feof($proc))
{
echo fread($proc, 2098);
@ flush();
}
echo '</pre>';
?>
编辑: PHP reading shell_exec live output没有涵盖我的问题。