2009-06-05 53 views
2

现在我不利用任何压缩方法的,只要把下面的body标签之间:如何在PHP中使用gzip作为css/js文件?

<link rel="stylesheet" type="text/css" href="Client/Css/all.css" /> 

是否可以使用ob_start(“ob_gzhandler”)在PHP压缩这个css文件?

又如何?

回答

4

这不是一般做编程,它是由Web服务器

对于Apache处理,有一个mod_gzipmod_deflate模块,您可以使用。

IIS has settings您可以使用。

+1

除非他使用的是旧版本的,他会想用mod_deflate,而不是mod_gzip。 – jacobangel 2009-06-05 14:21:10

+0

我不明白:gzip使用的不止是deflate,为什么Mod_Gzip比mod_deflate早? – omg 2009-06-05 14:27:35

2

是的,你可以(当管道通过执行压缩的PHP脚本的文件)。但是,它比简单地压缩输出要多得多。您只应将压缩输出发送给支持它的客户端,您应该确保正确处理缓存信息/请求。等等

在某些情况下,您的web服务器包含对所有为您提供的支持,而无需PHP脚本。在Apache的情况下看mod_deflate和mod_mime(指令AddEncoding)。

+0

另外,mod_expires – Piskvor 2009-06-05 14:19:25

1

有几种方法。

你可以告诉网络服务器来处理文件作为PHP(重命名有一个PHP扩展将是最简单),然后添加:

<?php 
    header("Content-type: text/css; charset=utf-8"); 
    ob_start("ob_gzhandler") 
?> 

顶端。

你可以编写一个PHP脚本来做同样的事情,但是读入CSS文件而不是内联。

这两个选项都会导致缓存问题 - 如果您想理解缓存控制HTTP标头,您也必须关心缓存控制HTTP标头。

最好的选择是忘记PHP,只是配置你的web服务器来压缩这些文件(使用mod_deflate模块,mod_gzip的或类似)

+0

不要忘记字符编码声明。 – Gumbo 2009-06-05 14:14:45

+0

这是相当无关紧要的 - 只有非常罕见的边缘案例不使用普通的ASCII - 这是可能使用的任何字符编码的子集。 – Quentin 2009-06-05 14:17:44

0

什么是你想实现什么?如果您试图收缩组件以发送到客户端浏览器,以便更快地下载它们,则应该使用mod_defalte。如果这是不是一种选择,你可以找到更多在这里:first result from googling "gzip php css"

编辑:我只是想指出的是,除非你使用Apache的是旧版本,你应该使用mod_deflate mod_gzip的。

1

如果您使用的是Apache Web服务器的新版本中添加以下.htaccess文件:


DeflateCompressionLevel 9 
SetOutputFilter DEFLATE 
BrowserMatch ^Mozilla/4 gzip-only-text/html 
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary 
Header append Vary User-Agent env=!dont-vary