首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CLI脚本中使用输出缓冲时打印到终端

在CLI脚本中使用输出缓冲时打印到终端
EN

Stack Overflow用户
提问于 2009-08-31 07:42:32
回答 3查看 8.1K关注 0票数 6

我使用命令行PHP脱机构建一些文件。为了捕获脚本输出,我使用了标准的ob_start内容:

代码语言:javascript
复制
ob_start();
// Echo lots of stuff
$content = ob_get_contents();
// Now the $content can be written to a file

但是,我也希望在将“主输出”收集到缓冲区时将一些消息打印到终端(例如,警告)。有办法这样做吗?似乎不可能暂停缓冲一段时间来打印终端消息,然后从缓冲区的保留位置继续进行缓冲。有什么解决办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-31 07:47:00

只需使用fput()写到STDOUT或STDERR (这两个常量都包含文件指针资源):

代码语言:javascript
复制
ob_start();
echo 'Output buffer';
fputs(STDOUT, "Log message");
$x = ob_get_contents();
ob_end_clean();;

echo "X = $x";
票数 8
EN

Stack Overflow用户

发布于 2009-08-31 07:45:10

使用php://stderr流:

代码语言:javascript
复制
$f = fopen('php://stderr', 'w');
fputs($f, 'Output');

编辑:也是,在CLI中有一个预定义STDERR常数

代码语言:javascript
复制
fputs(STDERR, 'Output');
票数 6
EN

Stack Overflow用户

发布于 2009-08-31 07:59:05

可以“暂停”输出缓冲区。将缓冲区的内容写入变量,结束缓冲区而不刷新。编写一些非缓冲的输出,然后再次调用ob_start()。该方法使用字符串连接,它是一种比较脏的方法。出于这个原因,我更喜欢其他方法而不是我自己的方法。

但无论是哪种情况,这里都有一个小的、实用的例子:

代码语言:javascript
复制
<?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;
?>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1356285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档