ob_get_contents如何在Php中工作?

时间:2013-02-03 11:28:23

标签: php ob-get-contents

这是我正在阅读的书中的示例代码:

ob_start();
include("{$path}.ini");
$string = ob_get_contents();
ob_end_clean();
$pairs = parse_ini_string($string);

我的问题是,ob_get_contents()如何知道从哪里获取内容? ({$ path} .ini在这种情况下)?

4 个答案:

答案 0 :(得分:10)

自从您调用ob_get_contents后,

ob_start()只获取输出缓冲区的内容。从本质上讲,PHP中的输出缓冲区会捕获任何已经输出到浏览器的任何内容(不包括标题)。它可能在您需要过滤某些输出的情况下很有用,或者您正在使用将输出直接写入屏幕的PHP方法(例如var_dump),而您更喜欢该方法的返回值。字符串。

在这种情况下,因为您include() .ini文件,它的内容将基本上输出到屏幕,ob_get_contents()将获取文件的内容。

如果您将echo "I'm a little teapot short and stout";放在include下方,$string文件正文后面的.ini也会包含此内容。

但是,在您的特定情况下,输出缓冲是不必要的开销,只需在file_get_contents文件上使用.ini即可。我不确定为什么一本书甚至会包含这些代码。

答案 1 :(得分:5)

“ob”代表“输出缓冲区”。当您调用ob_start()时,PHP会将所有输出(使用echo等)重新路由到输出缓冲区。然后,您可以使用其他ob_*函数来检索和/或清除缓冲区内容。

在您的示例中,它将缓冲由"{$path}.ini"引用的文件生成的任何输出。当你包含它时,它的输出被添加到缓冲区,当你调用ob_get_contents()时,它会检索缓冲区的内容。

答案 2 :(得分:2)

来自PHP:

ob_start — Turn on output buffering
ob_get_contents — Return the contents of the output buffer
ob_end_clean — Clean (erase) the output buffer and turn off output buffering

现在,ob_get_contents可以收集输出的所有缓冲区。

[1] http://www.php.net/manual/en/book.outcontrol.php

答案 3 :(得分:2)

ob_get_contents()在调用ob_start()函数后会收到所有回显的内容,因此{$path}.ini没有任何特殊之处 - 您需要回显要收集的数据(是的,甚至是将收集简单echoprint_r调用的输出 - 有时用于调试简单脚本。)

您可以将ob_start()函数理解为从屏幕到(不可见)PHP内部缓冲区的简单重定向,稍后由ob_get_contents()读取。因此,您可以在不调用ob_start()功能(甚至整个网页)的情况下重定向您在屏幕上看到的任何内容。