我发现,所提出的建议使用ob_
功能,所有这些emphase益处在互联网上几篇文章,并且没有使用上述功能的缺点。输出缓冲?为什么不?
我的问题是使用ob_
函数或设置ini_set('output_buffering', '1');
有什么缺点?
我发现,所提出的建议使用ob_
功能,所有这些emphase益处在互联网上几篇文章,并且没有使用上述功能的缺点。输出缓冲?为什么不?
我的问题是使用ob_
函数或设置ini_set('output_buffering', '1');
有什么缺点?
使用输出缓冲的利弊完全取决于你使用的上下文。
一个输出缓冲的最大缺点是运行时错误消息或警告可能会抑制,而你有时可能会结束了错误的数据。
考虑这个例子:
如果其中fetch_template_and_render
或do_render
抛出运行时错误,他们会被人抛弃到你的输出,并最终在这个例子将在数据库或高速缓存告终。
这里有2个片段,展示了我的意思,你可以自己尝试
#1
<?php
echo 1/0;
?>
输出
Warning: Division by zero on line 1
#2
<?php
ob_start();
echo 1/0;
$var = ob_get_clean();
?>
输出没有。
为了避免这样的情况下,你需要勤于错误检查和采取预防措施。
努力时使用,ob_ *功能是非常强大的,超级有用。
无论如何,错误都应该单独处理,使用'set_error_handler()'。 –
下面是ob_功能相当不错的使用:
ob_start("ob_gzhandler");
只要zlib的扩展在支持PHP的,应该保证你的输出是GZ-压缩。它显着加快了大页面的页面传输速度。
与生活中的一切一样,这取决于上下文有负面影响。你刚才提到了一个加号,没有提到可能的缺点,并且有很多。此外,这不是问题的答案,也许你应该将它作为评论发布(尽管并没有让你失望)。 –
有没有主要的缺点,在适当的实施,使用输出缓冲。
输出缓冲可以允许错误/警告/通知(除停止错误外)出现在输出中,而不会显而易见。这通常是通过适当的错误检查,PHP环境的更好的配置和良好的错误处理程序的实现(如一个转换错误ErrorExceptions
可与try/catch语句捕获解决 - 看到Whoops!为错误处理程序示例使用ErrorExceptions
)。
内存可能是一个缺点,但对于大多数脚本来说,输出大小通常是微不足道的。发送大量数据的情况下,诸如使用fpassthru
递送文件内容到这种情况的一个例外可能是。这可通过写该内容到输出之前关闭输出缓冲(ob_end_clean或ob_end_flush)来解决。
内存消耗是最重要的缺点。我最近构建了一个PHP脚本,用于输出大量的几兆字节的XML数据。这个'页面'的框架是使用的输出缓冲的一部分。通过输出缓冲,您需要一个足够容纳所有数据的内存缓冲区。在我的情况下,它不是,脚本失败。
如果输出的数据直接传送给客户端,你就没有这个问题。在这种情况下以及吞吐文件时,这尤其重要。在生成“正常”HTML页面的情况下,您可能不会占用整个缓冲区,但如果同时有多个请求,则仍需要大量内存。
如果没有缓冲,数据消失了,不麻烦你的服务器了。只要数据被缓冲,就可以改变或刷新数据,但实际上会给服务器带来负担。
内存消耗大多数。 –
另外,你有什么来源? –
来自文档:'某些Web服务器(例如Apache)在调用回调函数时更改脚本的工作目录。您可以通过例如CHDIR(目录名($ _ SERVER [ 'SCRIPT_FILENAME']))在回调function.' –