使用浏览器可读的PHP保存gzip压缩文件

时间:2011-06-04 20:13:17

标签: php gzip

我正在将我网站的主页面缓存为平面html文件,如果用户未登录,则使用.htaccess加载该文件(因为没有显示用户特定信息),而不是加载我的整个php框架。

这样做的一个缺点是PHP不会自动gzip文件,因为PHP甚至没有被使用,因为它只是一个由浏览器加载的普通html文件。

我试过了:

$html = gzencode($html);
$fp = fopen($cachefile, 'w'); 
fwrite($fp, $html); 

但是当文件网址在浏览器中加载时,它只是一堆奇怪的字符。

编辑:我想一个简单的解决方案是将文件保存为.php而不是html,这样php ob_gzhandler压缩文件。我想知道是否通过提供已经gzip并完全跳过php的html来获得性能提升..

1 个答案:

答案 0 :(得分:1)

更新:正如OP发现的那样,ob_gzhandler()可以处理这种用例,并且不是一种糟糕的方法。

原始答案:即使您设法以某种方式进行此项工作,也可能会导致性能下降,而不仅仅是将文件作为文件系统上的纯文本文件。

如果你想利用gzip压缩,请让Apache使用mod_deflate。存储未压缩的文件。 Apache将处理压缩问题。

但在你完成设置之前遇到任何麻烦:这个文件有多大?如果它不是一个非常大的HTML文件,那么每次事务必须解压缩文件的开销可能会超过实际压缩的好处。你真的只看到非常大的HTML文件的好处,这些文件可能会导致浏览器戛然而止。

所有这一切,您可以使用gzdecode()来解压缩文件,但是您没有提供静态文件 - 您在提供之前通过PHP运行它。同样,对于这个用例,你最好的选择可能只是提供直接的HTML而不是压缩压缩。