在PHP上使用输出缓冲区有什么区别?

时间:2014-12-10 04:00:22

标签: php macos output buffering

我是PHP的新手,我对输出缓冲有疑问。我在网上找到了这个代码:

ob_start();             
system('ipconfig /all');                
$contents = ob_get_contents();              
ob_end_clean();                     
$searchFor = "Physical";                
$pmac = strpos($contents, $searchFor);              
$mac = substr($contents, ($pmac + 36), 17);             
return $mac;

一切正常,但我不明白输出缓冲区的用法。如果我将其更改为:

$contents = system('ipconfig /all');                
$searchFor = "Physical";                
$pmac = strpos($contents, $searchFor);              
$mac = substr($contents, ($pmac + 36), 17);             
return $mac;

似乎无法过滤$ contents的内容来查找mac地址。那么输出缓冲为此做了什么?

根据我对输出缓冲的理解,它将所有页面加载到一个变量中,然后一次全部返回,以便页面一次加载更快。我无法真正看到这将如何改变输出在这种情况下如此彻底。

1 个答案:

答案 0 :(得分:0)

system()调用不仅会运行命令,还会显示输出。至少,您的示例代码应该已经分配了返回值。 此外还需要输出缓冲,因为system调用会将命令结果直接刷新到Web服务器(除非有明确的输出缓冲区)。

这里应该使用的是exec() - 而是立即将结果分配给& $contents