ob get 内容 - ob_get_contents如何在 PHP 中工作


ob get contents - How does ob_get_contents work in Php?

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

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

我的问题是,ob_get_contents()怎么知道从什么地方获取内容?({$path}.ini在这种情况下)?

ob_get_contents只是获取输出缓冲区的内容,因为您调用了ob_start()。本质上,PHP 中的输出缓冲区捕获任何本来可以输出到浏览器的内容(不包括标头)。在以下情况下,它很有用:您可能需要过滤某些输出,或者您正在使用将输出直接写入屏幕的 PHP 方法(例如 var_dump),而您希望将该方法的返回值转换为字符串。

在这种情况下,由于您正在include() .ini文件,因此它的内容实质上将输出到屏幕,ob_get_contents()将获取文件的内容。

如果你要把echo "I'm a little teapot short and stout";放在include下面,这也将包含在.ini文件正文之后的$string中。

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

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

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

来自 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

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

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