ThinkPHP3.1新特色之对页面压缩输出的支撑

2019-07-20 04:58栏目:编程程序

就可以解决问题。

;zlib.output_handler =
;gzip压缩方式,建议注释

1、找不到php_zlib.dll文件?

网上的教程基本是你抄我来我抄他,不外乎加头加尾或者自构函数两种写法。实际上每个php页面都要去加代码——当然也可以include引用,不过总显得略微麻烦。

您可能感兴趣的文章:

  • ThinkPHP中自定义错误页面和提示页面实例
  • ThinkPHP3.1.x修改成功与失败跳转页面的方法
  • Thinkphp5结合layer弹窗定制操作结果页面
  • thinkphp框架下404页面设置 仅三步
  • ThinkPHP 404页面的设置方法
  • ThinkPHP页面跳转success与error方法概述
  • ThinkPHP访问不存在的模块跳转到404页面的方法
  • thinkphp 一个页面使用2次分页的实现方法
  • thinkPHP5(TP5)实现改写跳转提示页面的方法

网页开启gzip压缩以后,其体积可以减小20%~90%,可以节省下大量的带宽,从而减少页面响应时间,提高用户体验。

1、默认php是不开启zlib整站压缩输出的,而是通过对需要压缩输出的页面使用ob_gzhandler函数实现,两者只能二选一,否则会报错。

图片 1

但是由于服务器环境的不同,有时候这个配置会和php.ini文件中的zlib压缩配置冲突。而ThinkPHP3.1版则内置了页面压缩输出的功能,不再需要再手动添加ob_gzhandler代码,增加OUTPUT_ENCODE配置参数,并支持检测zlib.output_compression。

php文件改法:

zlib.output_compression = Off
;zlib.output_compression_level = -1

实际上最简单的办法,打开php目录下的php.ini文件,找到zlib.output_compression = Off,改成zlib.output_compression = On,

框架默认会进行页面压缩输出,并且会自动检测zlib.output_compression配置,如果php.ini里面zlib.output_compression是开启状态,则仍然以服务器环境的页面压缩方式进行页面压缩。

复制代码 代码如下:

一般情况下我们出现大量数据传输理希望减少服务器的带宽压力,会采取一种方式来压缩文件传输,php中用zlib也可以实现gzip压缩输出,下面我们来看GZIP压缩输出各种方法总结.

图片 2

if(!ini_get('zlib.output_compression') && C('OUTPUT_ENCODE')) ob_start('ob_gzhandler');

您可能感兴趣的文章:

  • php实现zip压缩文件解压缩代码分享(简单易懂)
  • php生成zip压缩文件的方法详解
  • php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
  • php打包网站并在线压缩为zip
  • php实现zip文件解压操作
  • PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
  • php在线解压ZIP文件的方法
  • php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
  • php的ZipArchive类用法实例
  • ThinkPHP实现将本地文件打包成zip下载
  • php简单创建zip压缩文件的方法

复制代码 代码如下:

图2.站长站gzip检测工具也显示gzip有效。

ob_start('ob_gzhandler');

建议在页面开头写上,可以写到头部公共文件

function ob_gzip($content) // $content 就是要压缩的页面内容
{
if(!headers_sent() && extension_loaded("zlib") && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))//判断页面头部信息是否输出,PHP中zlib扩 展是否已经加载,浏览器是否支持GZIP技术
{
$content = gzencode($content." n//此页已压缩",9); //为准备压缩的内容贴上"//此页已压缩"的注释标签,然后用zlib提供的gzencode()函数执行级别为9的压缩,这个参数值范围是0-9,0 表示无压缩,9表示最大压缩,当然压缩程度越高越费CPU。
//用header()函数给浏览器发送一些头部信息,告诉浏览器这个页面已经用GZIP压缩过了!
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
}
return $content; //返回压缩的内容

图1.通过firebug查看请求头和回应头,实际上gzip效果已经显示

一般是由于你的服务器配置了其他的压缩方式导致冲突,这个时候你可以手动关闭OUTPUT_ENCODE,即:

php配置改法:

php gzip配置知识点:

二、一般情况下缓存是4k(output_buffering = 4096)。

output_handler "ob_gzhandler" conflicts with "zlib.output_compression" 

复制代码 代码如下:

这一步是最关键的开启php gzip压缩输出配置步骤,很多网友会说我已经开启了php.ini配置文件中的php gzip配置怎么还是没有实现php gzip压缩,就是因为没有让apache装载deflate_module,方法如下,将

需要说明的是以下几点

在个别特殊的环境下面,如果出现类似下面的错误提示:

zlib.output_compression = On
;开启gzip功能

2、zlib.output_compression默认值为Off,你可以将其设置为On,或者output buffer size(默认为4k)

一般而言,页面文件开启gzip压缩以后,其体积可以减小60%~90%,对于文字类站点,可以节省下大量的带宽与用户等待时间。但是不论是iis还是apache默认都只压缩html类静态文件,对于php文件需要模块配置才可支持(iis7.5中开启动态 静态压缩也可以),于是利用php自身功能到达gzip的效果也成为一项合理的诉求。

相关代码只有一行:

if( !headers_sent() && // 如果页面头部信息还没有输出
extension_loaded("zlib") && // 而且php已经加载了zlib扩展
strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")) //而且浏览器接受GZIP
{
  ini_set('zlib.output_compression', 'On');
  ini_set('zlib.output_compression_level', '4');
}

函数写好后,就用ob_start调用它,于是原来的ob_start()变成

再把;zlib.output_compression_level前面的;去掉,后面的-1改成1~5的数值。这样便可以实现所有php页面的gzip效果,不再需要单独修改网站的php文件——如果站点很多的话,会节省很多时间。

目前大多数浏览器都已经支持页面的压缩输出,通过压缩输出,页面大小可以减少30%,但是由于3.0及以前的版本都没有内置页面压缩输出功能,所以一般来说,开发人员需要自己在入口文件中添加:

zlib.output_compression_level = 4
;gzip压缩级别,1~9,建议3~5

实例1

三、zlib.output_compression_level 建议参数值是1~5,6以实际压缩效果提升不大,cpu占用却是几何增长。

'OUTPUT_ENCODE'=>false

修改为

一、;zlib.output_handler必须保持注释掉,因为此参数和前面的设置冲突——官方的说法。

版权声明:本文由ca888发布于编程程序,转载请注明出处:ThinkPHP3.1新特色之对页面压缩输出的支撑