0

我想压缩我的页面,所以我把

ob_start('ob_gzhandler');

在我的 php 头文件的开头。但是,当我在玩耍时,我注意到如果我在 ob_gzhandler 没有被使用的情况下开始会话,它会给我一个空白页!所以我做了以下事情并且它起作用了:

<?php
  if (session_id() === null ) ob_start('ob_gzhandler');
?>

我如何不确定这是否会一直使用压缩,因为我想象它们可能是一个会话,但浏览器仍然会收到未压缩的数据!我想如果发生这种情况除了开发时间之外真的不应该发生,我将不得不重新启动会话。但我想我真正想知道的是一些关于 zlib 和这种压缩的快速提示。有什么性能提示吗?如果文件末尾没有指示,我假设服务器输出内部缓冲区,但我应该放一个吗?ob_end_flushob_end_clean?ob_end_close?

关于使用 memcache 的任何注意事项?任何提示和信息将不胜感激!

4

1 回答 1

0

在 ob_gzhandler() 压缩数据之前,它会检查浏览器将接受什么类型的编码,如果它的 gzip 或 deflate(也许还有其他的东西,我不确定)它将使用该压缩打印输出。支持所有流行的浏览器,即使您编写自己的代码或担心搜索引擎蜘蛛,也由 HTTP 请求者发送正确的 HTTP 标头,说明它接受压缩页面。不用担心,如果浏览器不支持压缩页面,此函数将返回 FALSE 并且不应用压缩。

这里有一些其他的东西来自 php man: ob_start 这个函数将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本发送输出(除了标题),而是将输出存储在内部缓冲区中。

这个内部缓冲区的内容可以使用 ob_get_contents() 复制到一个字符串变量中。要输出存储在内部缓冲区中的内容,请使用 ob_end_flush()。或者, ob_end_clean() 将默默地丢弃缓冲区内容。警告

一些 Web 服务器(例如 Apache)在调用回调函数时会更改脚本的工作目录。您可以通过回调函数中的例如 chdir(dirname($_SERVER['SCRIPT_FILENAME'])) 将其更改回来。

输出缓冲区是可堆叠的,也就是说,您可以在另一个 ob_start() 处于活动状态时调用 ob_start()。只需确保调用 ob_end_flush() 的次数适当。如果多个输出回调函数处于活动状态,则输出将按嵌套顺序依次通过每个回调函数进行过滤。

这部分又是从 php 手册中复制的!

于 2010-08-14T05:48:03.040 回答