我正在使用命令行PHP来离线构建一些文件.要捕获脚本输出,我使用标准的ob_start:
ob_start();
// Echo lots of stuff
$content = ob_get_contents();
// Now the $content can be written to a file
Run Code Online (Sandbox Code Playgroud)
但是,我还想将一些消息打印到终端(例如,警告),同时将"主输出"收集到缓冲区中.有没有办法做到这一点?似乎暂时不能暂停缓冲以打印终端消息,然后从剩下的位置继续缓冲.这有什么解决方法吗?
只需使用fputs()写入STDOUT或STDERR(两个包含文件指针资源的常量):
ob_start();
echo 'Output buffer';
fputs(STDOUT, "Log message");
$x = ob_get_contents();
ob_end_clean();;
echo "X = $x";
Run Code Online (Sandbox Code Playgroud)
使用php://stderr流:
$f = fopen('php://stderr', 'w');
fputs($f, 'Output');
Run Code Online (Sandbox Code Playgroud)
编辑:此外,在CLI中,有一个预定义的STDERR常量:
fputs(STDERR, 'Output');
Run Code Online (Sandbox Code Playgroud)