Apache 和PHP 如何開啟gzip 壓縮
網頁開啟gzip壓縮以後,其體積可以減小60%~90%,可以節省下大量的帶寬與用戶等待時間,下圖就是我愛水煮魚首頁經過gzip壓縮之後的比例。由於網站的CSS/JS/圖片等靜態資源我們已經使用七牛進行CDN加速,而七牛已經實現了gzip壓縮,所以如果網站的PHP生成的內容也可以實現gzip壓縮,則整站即可實現gzip壓縮。
下面我就從Apache 服務器,PHP 等方面去講解下如何開啟gzip 壓縮:
Apache 開啟gzip 壓縮
首先確保你的Apache 已經加載了mod_deflate 模塊,然後在httpd.conf 代碼中加載以下代碼:
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/json application/x-httpd-php application/x-javascript </IfModule>
如果你沒有權限修改你的主機,你也可以將以上代碼複製到網站根目錄的.htaccess 文件。
PHP 開啟gzip 壓縮
如果修改Apache httpd.conf 文件無效,則可以通過修改PHP 的php.ini 方法:
打開PHP目錄下的php.ini文件,找到zlib.output_compression = Off
,改成zlib.output_compression = On
,再把;zlib.output_compression_level
前面的;去掉,後面的-1改成1~5的數值,這樣便可以實現所有PHP頁面的gzip效果。
如果無法修改php.ini 文件,則可以在需要gzip 壓縮的PHP 文件頭部加入:
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
ob_start('ob_gzhandler');
}else{
ob_start();
}
既可以實現該php 頁面gzip 壓縮。
WordPress 開啟gzip 壓縮
如果修改Apache httpd.conf 文件和PHP 的php.ini 文件的方法都無效,則將下面的代碼複製到當前主題的functions.php 文件中也可以實現WordPress 整站gzip 壓縮:
add_action('init', 'wpjam_gzip_compression');
function wpjam_gzip_compression(){
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
ob_start('ob_gzhandler');
}else{
ob_start();
}
}
總結
經過測試,採用服務器壓縮要比使用PHP 壓縮要更快,而且壓縮之後更小。所以最好的方法還是直接讓Apache 直接進行gzip 壓縮。如果無法修改Apache 的httpd.conf 文件,再嘗試去修改php.ini 文件,最終才是使用修改php 文件以及WordPress hook 的方法。