Php 输出缓冲区,处理后获取内容?

Php 输出缓冲区,处理后获取内容?,php,Php,我使用输出缓冲来处理东西(我知道,非常描述性) 我想做的是结束输出缓冲,让处理函数执行它们的处理,然后将结果输出作为字符串,而不是输出到浏览器 这可能吗?我似乎不知道要实现这一点,我需要什么样的函数组合来完成。。。我最初的想法是“我可以缓冲ob\u end\u flush的输出”。。。嗯,荒谬:p 作为我努力实现目标的一个基本示例: <?php ob_start(function($c) {return "PASS\n";}); echo "FAIL\n"; $c = ob_get_co

我使用输出缓冲来处理东西(我知道,非常描述性)

我想做的是结束输出缓冲,让处理函数执行它们的处理,然后将结果输出作为字符串,而不是输出到浏览器

这可能吗?我似乎不知道要实现这一点,我需要什么样的函数组合来完成。。。我最初的想法是“我可以缓冲
ob\u end\u flush
的输出”。。。嗯,荒谬:p


作为我努力实现目标的一个基本示例:

<?php
ob_start(function($c) {return "PASS\n";});
echo "FAIL\n";
$c = ob_get_contents();

ob_end_flush(); // outputs PASS, as it has been processed
echo $c; // outputs FAIL, because that was the content of the buffer... unprocessed...
// I want it processed.

我现在看到了编辑和评论的问题。您需要另一个输出缓冲区,这是正确的,因为回调仅在调用flush或end时以及函数中的任何get之前调用:

ob_start(function($c) {return "PASS\n";});
echo "FAIL\n";
ob_start();
ob_end_flush(); // buffers PASS, as it has been processed
$c = ob_get_contents();
echo $c; // outputs PASS

我对
ob\u get\u contents()
的理解是,它返回缓冲区的内容,而缓冲区的内容将在处理程序运行之前返回。-我希望通过两次,但我得到了通过/失败的机会。为什么你希望通过两次?只刷新缓冲区一次,因此回调也只调用一次。“Expect”是错误的词。我的意思是,这就是我“希望”发生的事情——即在处理完成后获取缓冲区的内容,而不将其转储到浏览器。
ob\u get\u contents()
gets
FAIL
ob\u end\u flush()
get
PASS
从回调中返回。然后从
$c
回显
FAIL
。所以你得到了
PASS-FAIL
@NiettheDarkAbsol-TBH,我真的不明白你的问题是什么/你期望输出什么以及为什么。使用回调函数
ob_start()
(意味着每次刷新缓冲区时,回调函数都会被调用)打开输出缓冲。然后在缓冲区中打印“FAIL”。然后使用
ob\u get\u contents()
将缓冲区内容放入变量中(注意:此处不刷新缓冲区)。在此之后,结束缓冲区并使用
ob\u end\u flush()
刷新它。将打印:
PASS
。最后还可以打印存储在
$o
中的缓冲区内容,这是
FAIL
重新打开,不是重复的。是否愿意为您的实际问题提供更多信息,而不是作为答案下的注释?这样更好@PeeHaa?那么这个问题我们在哪里?我仍在试图找出如何获取当前缓冲区,后处理而不是预处理(这就是ob_get_contents
给出的内容)。我已经实现了一种解决方法,在整个过程中使用了另一层输出缓冲,但它有点混乱!