我使用命令行PHP脱机构建一些文件。为了捕获脚本输出,我使用了标准的ob_start内容:
ob_start();
// Echo lots of stuff
$content = ob_get_contents();
// Now the $content can be written to a file但是,我也希望在将“主输出”收集到缓冲区时将一些消息打印到终端(例如,警告)。有办法这样做吗?似乎不可能暂停缓冲一段时间来打印终端消息,然后从缓冲区的保留位置继续进行缓冲。有什么解决办法吗?
发布于 2009-08-31 07:47:00
只需使用fput()写到STDOUT或STDERR (这两个常量都包含文件指针资源):
ob_start();
echo 'Output buffer';
fputs(STDOUT, "Log message");
$x = ob_get_contents();
ob_end_clean();;
echo "X = $x";发布于 2009-08-31 07:45:10
使用php://stderr流:
$f = fopen('php://stderr', 'w');
fputs($f, 'Output');编辑:也是,在CLI中有一个预定义STDERR常数
fputs(STDERR, 'Output');发布于 2009-08-31 07:59:05
可以“暂停”输出缓冲区。将缓冲区的内容写入变量,结束缓冲区而不刷新。编写一些非缓冲的输出,然后再次调用ob_start()。该方法使用字符串连接,它是一种比较脏的方法。出于这个原因,我更喜欢其他方法而不是我自己的方法。
但无论是哪种情况,这里都有一个小的、实用的例子:
<?php
ob_start();
echo 'Buffered line 1.<br>';
$ob = ob_get_contents();
ob_end_clean();
echo 'Non-buffered line.<br>';
ob_start();
echo 'Buffered line 2.<br>';
$ob .= ob_get_contents();
ob_end_clean();
echo 'Non-buffered line.<br>';
ob_start();
echo 'Buffered line 3.<br>';
$ob .= ob_get_contents();
ob_end_clean();
echo 'Non-buffered line.<br>';
echo $ob;
?>https://stackoverflow.com/questions/1356285
复制相似问题