输出缓冲不起作用或没有任何意义

Output buffering not working or making any sense

我完全被难住了。我一定是遗漏了一些非常简单的东西,或者不明白它是如何工作的。

输出缓冲在 MAMP PRO 上根本不起作用,所有内容都只是显示在页面上,没有任何内容进入缓冲区,甚至没有 hello world。每个例子我都试过了

我正在创建一个简单的框架,但输出缓冲不起作用。

我有一个模块 class,其功能包括一个文件,代码只显示在页面上,我什至没有清除缓冲区。

我检查了加载的配置文件中的 php.ini 文件,配置文件显示 output_buffering = 4096。 我很困惑

代码示例如下:

//index.php
var_dump(ob_start());//returns true
echo "Hello World"; //prints straight to the screen
include MODULES.'/home.php'; //output comes straight out
var_dump(ob_get_contents());//Shows html string
$test = ob_get_contents();
echo $test; //Output gets displayed twice

在PHP.ini中: output_buffering=4096;

ob_get_contents 不会清除缓冲区,因此当脚本结束时它会像往常一样刷新到输出。 如果您只想获取字符串形式的数据并清除缓冲区,请使用 ob_get_clean()

您可以将输出缓冲视为在输出缓冲区中创建 "bookmarks" 或 "restore points"。例如:

  • 缓冲区为空
  • echo 'hello' - 输出缓冲区有 "hello" 字符串
  • ob_start() - "bookmark" 已创建
  • echo 'world' - 输出缓冲区有两行 "hello" 和 "world" strings
  • ob_get_contents() - returns 自上次以来输出缓冲区内容 "bookmark" - returns "world",但缓冲区内容保持不变
  • 脚本结束并将整个输出缓冲区刷新到屏幕

  • 如果您使用 ob_get_clean() 代替它 returns 自上次 "bookmark" 以来的内容并将其从输出缓冲区中删除 - 缓冲区只有 "hello"它

编辑:我知道这是非常简单和幼稚的解释,但我记得它对我理解这个概念有很大帮助。