我正在使用 PHP+Zend 构建一些 CLI 进程(是的,我也讨厌它),我遇到了一个奇怪的问题,我不知道如何解决关于 exec() 或 passthru() 命令的输出的问题。
简而言之,我有一个testexecAction
fwrite(STDOUT,"First\n");
passthru("ping -c 3 192.168.18.10");
fwrite(STDOUT,"Second\n");
当我使用为 Zend 制作的 CLI 界面调用它时,我得到以下输出
~ php console.php --funcion testexec
First
Second
PING 192.168.18.10 (192.168.18.10): 56 data bytes
64 bytes from 192.168.18.10: icmp_seq=0 ttl=64 time=0.692 ms
...
如您所见, passthru 命令的输出正在打印,但在“第二”行之后打印,就像它被保存在某个缓冲区中一样,我想更改此行为,以便输出不缓冲,但我没有想法如何完成它。其背后的原因是我正在使用 passthru/exec 来调用其他长的 php 进程,我想实时查看输出并按顺序排列
我猜它在某处是 Zend 选项,但我不确定“某处”,因为我已经使用原始 PHP 进行了其他测试,并且输出没有缓冲,而是直接打印到控制台。
我的 Zend CLI 界面相当简单
$_SERVER["REQUEST_URI"] = "/console/" . getConsoleArg("-function");
$application->bootstrap()
->run();