这是我正在阅读的书中的示例代码:
ob_start();
include("{$path}.ini");
$string = ob_get_contents();
ob_end_clean();
$pairs = parse_ini_string($string);
我的问题是,如何ob_get_contents()
知道从什么获取内容?(在这种情况下是 {$path}.ini)?
这是我正在阅读的书中的示例代码:
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 中的输出缓冲区会捕获任何可能输出到浏览器的内容(不包括标题)。var_dump
它在您可能需要过滤某些输出的情况下很有用,或者您正在使用将输出直接写入屏幕的 PHP 方法(例如),并且您希望该方法的返回值以字符串形式显示。
在这种情况下,因为您正在include()
输入.ini
文件,所以它的内容本质上将输出到屏幕,并且ob_get_contents()
将获取文件的内容。
如果您要放在echo "I'm a little teapot short and stout";
下方include
,这也将包含在文件$string
正文之后.ini
。
但是,在您的特定情况下,输出缓冲是不必要的开销,只需file_get_contents
在.ini
文件上使用即可。我不确定为什么一本书甚至会包含此代码。
“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 可以收集所有输出的缓冲区。
ob_get_contents()
正在获取调用ob_start()
函数后回显的所有内容,因此没有什么特别之处{$path}.ini
- 您需要回显要收集的数据(是的,甚至会收集简单echo
或print_r
调用的输出 - 有时对调试简单脚本很有用)。
您可以ob_start()
将函数理解为从屏幕到(不可见)PHP 内部缓冲区的简单重定向,该缓冲区稍后会被ob_get_contents()
. 因此,您将能够重定向您在屏幕上看到的任何内容,而无需调用ob_start()
函数(甚至是整个网页)。