回显执行过程中未发送给收件人

echoing mid execution is not being sent to the recipient

提问人:lazersquids mcgee 提问时间:12/6/2017 更新时间:12/6/2017 访问量:74

问:

$output = ob_get_contents();
        ob_end_clean();
        echo json_encode($data);
        ob_start();
        echo $output;

此代码是从另一台服务器作为 API 调用的,我想将 json 数据发送回该服务器,但我想将$output保存在输出缓冲区中,以便以后我可以将其记录到文件中。未发送到请求脚本。我尝试了许多变体,但没有奏效。当我在行后立即添加时,它可以工作,除非我实际上不希望它在那一刻。我该如何解决这个问题?json_encode($data);flush()ob_flushdie()json_encode($data);die()

php echo ob-start ob-get-contents

评论

0赞 Unex 12/6/2017
也许在您之前使用“打开输出缓冲”,如文档中所述ob_start()echo json_encode($data)ob_start()
0赞 lazersquids mcgee 12/6/2017
我想我试过了,但我想立即将它发送回请求此脚本的服务器,所以我不想为此使用输出缓冲。json_encode($data)

答:

1赞 GolezTrol 12/6/2017 #1

怎么样:

将结果存储在变量中,回显变量,记录变量。无需输出缓冲:

$output = json_encode($data);
echo $output;
log_to_whatever($output);

如果您确实需要输出缓冲,那么您应该在回显之前开始缓冲:

ob_start();
echo json_encode($data);
$output = ob_get_clean(); // Shorthand for get and clean
echo $output;
log_to_whatever($output);

您实际上可以刷新缓冲区(= 将其发送到客户端),而不是清理缓冲区,但仍然可以将其放入变量中。

ob_start();
echo json_encode($data);
$output = ob_get_flush(); // Shorthand for get and flush
// echo $output; This is not needed anymore, because it is already flushed
log_to_whatever($output);

但无论哪种情况,这些似乎都是简单的第一个解决方案的繁琐替代方案,至少在您提出的场景中是这样。