这是我正在阅读的书中的示例代码:
ob_start();
include("{$path}.ini");
$string = ob_get_contents();
ob_end_clean();
$pairs = parse_ini_string($string);
我的问题是,ob_get_contents()
如何知道从哪里获取内容? ({$ path} .ini在这种情况下)?
答案 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可以收集输出的所有缓冲区。
答案 3 :(得分:2)
ob_get_contents()
在调用ob_start()
函数后会收到所有回显的内容,因此{$path}.ini
没有任何特殊之处 - 您需要回显要收集的数据(是的,甚至是将收集简单echo
或print_r
调用的输出 - 有时用于调试简单脚本。)
您可以将ob_start()
函数理解为从屏幕到(不可见)PHP内部缓冲区的简单重定向,稍后由ob_get_contents()
读取。因此,您可以在不调用ob_start()
功能(甚至整个网页)的情况下重定向您在屏幕上看到的任何内容。