Php 当不存在会话时,ob_gzhandler返回空白页

Php 当不存在会话时,ob_gzhandler返回空白页,php,gzip,output-buffering,Php,Gzip,Output Buffering,我想压缩我的页面,所以我把 ob_start('ob_gzhandler'); 在我的php头文件的开头。然而,当我在玩的时候,我注意到如果我在没有使用ob_gzhandler的情况下启动会话,它会给我一个空白页! 所以我做了下面的工作,它成功了: <?php if (session_id() === null ) ob_start('ob_gzhandler'); ?> 然而,我不确定这是否会像我想象的那样始终使用压缩,因为它们可能是一个会话,但浏览器仍将接收未压缩的数

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

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的注意事项吗?任何提示和信息将不胜感激

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

下面是php人的一些其他内容: 观察开始 此功能将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本发送任何输出(头除外),而是将输出存储在内部缓冲区中

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

某些web服务器(例如Apache)在调用回调函数时更改脚本的工作目录。您可以通过回调函数中的chdir(dirname($\u SERVER['SCRIPT\u FILENAME'])等方式将其更改回来

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


同样,这一部分是从php手册中复制的

与memcache无关