PHP页面gzip压缩输出提高页面访问速度

网络整理 - 07-29

网站的访问速度关系到一个网站的质量,当用户在客户端输入URL的时候你不希望让他们等太久吧,提高页面传递速度也是提高网站整体速度的一种办法。通过压缩页面大小后传输可显著提高页面访问速度。一般情况下都是通过服务器端配置apache module_gzip模块(<apache2.0)或mod_deflate模块(>apache2.0)实现支持gzip压缩来完成。PHP本身也提供了使用zlib扩展来对页面进行gzip压缩输出的方法,下面通过实例详细说明php zlib的使用方法。

  zlib与gzip的区别

  zlib是一个通用的压缩开源库,又是一种数据压缩格式,gzip也是一种数据压缩格式,zlib库默认的压缩方法并不是gzip,而是zlib的,因此使用zlib压缩得到gzip格式的数据,通常使用zlib提供的gz***系列函数实现。

  php zlib安装

  在使用zlib之前首先需要安装php zlib扩展,我是在Windows下进行PHP环境搭建,默认已支持zlib的使用,如果你的PHP环境不支持zlib的使用,请下载zlib的DLL扩展文件放置到PHP.INI配置文件中extension_dir设定的目录下并加载zlib扩展并重启服务器即可。

  使用php zlib实现页面gzip压缩输出的原理

  我们知道要想实现php gzip压缩输出,首先需要有需要有输出的内容,其次对内容压缩后输出,而PHP的缓存开启函数ob_start正好可以用来首先存放需要压缩的内容,然后使用php zlib进行gzip算法压缩后输出。

  使用php zlib实现页面gzip压缩输出的方法

  1、创建一个包含如下HTML文件内容的PHP文件,命名为php-zlib.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>PHP页面gzip压缩输出提高页面访问速度实例教程</title>
</head>
<body>
建站学页面gzip压缩输出提高页面访问速度实例教程
</body>
</html>
 2、php zlib扩展加载,开启PHP缓存区对页面进行gzip压缩

  在页面头部添加如下代码

<?php
if(extension_loaded("zlib") && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")){
    ob_start("ob_gzhandler");
}else {
    echo "php zlib使用失败,请确认是否已加载zlib扩展";
    exit();
}
?>
php zlib使用知识点:
  1、使用extension_loaded函数判断php zlib扩展是否已加载,并通过$_SERVER["HTTP_ACCEPT_ENCODING"]获取头部信息判断是否支持php gzip压缩。PHP环境变量$_SERVER和系统常量详解

  2、通过ob_start(”ob_gzhandler”)告知对缓存区的内容使用ob_gzhandler函数进行压缩以得到gzip压缩格式的数据,如果客户端不支持压缩的页面则此函数返回false。

  3、输出缓存并关闭缓存

  在页面尾部添加如下代码

<?php
if(extension_loaded("zlib")){
    ob_end_flush();
}
?>
至此,最简单的使用php zlib扩展实现页面gzip压缩的工作就完成了,下面使用YSlow插件可以看到原本此页面大小为0.4k,经过使用php gzip压缩后大小为0.3k。除了使用ob_gzhandler内置函数进行gzip压缩外,结合php zlib扩展提供的gzencode()函数可自定义压缩函数进行更大比例的压缩,更多php zlib扩展的使用方法下次再介绍。