这是我正在阅读的书中的示例代码:
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
没有什么特别之处 - 您需要回显要收集的数据(是的,甚至将收集简单echo
或print_r
调用的输出 - 有时对于调试简单脚本很有用)。
您可以将ob_start()
函数理解为从屏幕到(不可见的)PHP内部缓冲区的简单重定向,稍后由ob_get_contents()
读取。因此,您将能够重定向屏幕上可能看到的任何内容,而无需调用ob_start()
函数(甚至整个网页)。