回显中期执行没有发送给收件人

时间:2017-12-05 16:32:48

标签: php echo ob-start ob-get-contents

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

此代码从另一台服务器调用为API,我想将json数据发送回该服务器,但我想在输出缓冲区中保留$ output,以便稍后将其记录到文件中。 json_encode($data);未发送到请求脚本。我使用flush()ob_flush尝试了许多变体,但没有奏效。当我在die()行之后立即添加json_encode($data);时,除了我当时并不想要它die()之外。我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分: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);

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