本文章利用一个实例来介绍php中的zlib进行文件的压缩和解压缩,在我们使用zlip功能之前我们需要进行如下操作,否则就没能往下看了,首先在PHP.ini里面设置:
- zlib.output_compression = On
- zlib.output_compression_level = 6
第一项是开启压缩,第二项是压缩率,可选范围为1-9;
然后是apach里面开启deflate压缩,去掉井号。
- #LoadModule deflate_module modules/mod_deflate.so
到此为止这样还是不行的,还需要在http.conf选个一空白处加上对文件类型的输出过滤,对哪些后缀的进行选择性压缩。
- AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
- AddOutputFilter DEFLATE css js txt php xml html htm
如果没有权限修改php.ini文件我们可以常用使用phpr ini_set函数来操作,如:
- <?php
- ini_set("zlib.output_compression", "On");
- ?>
- <?php
- ini_set("zlib.output_compression", 4096);
- ?>
好了现在万事具备了我们来入正文件,压缩swf文件:
- <?php
- //文件名
- $filename = "test.swf";
- //打开文件
- $rs = fopen($filename,"r");
- //读取文件的数据
- $str = fread($rs,filesize($filename));
- //设置swf头文件
- $head = substr($str,1,8);
- $head = "C".$head;
- //获取swf文件内容
- $body = substr($str,8);
- //压缩文件内容,使用最高压缩级别9
- $body = gzcompress($body, 9);
- //合并文件头和内容
- $str = $head.$body;
- //关闭读取的文件流
- fclose($rs);
- //创建一个新的文件
- $ws = fopen("create.swf","w");
- //写文件
- fwrite($ws,$str);
- //关闭文件留
- fclose($ws);
- ?>
解压flash swf文件
- <?php
- //文件名
- $filename = "test.swf";
- //打开文件
- $rs = fopen($filename,"r");
- //读取文件的数据
- $str = fread($rs,filesize($filename));
- //设置swf头文件
- $head = substr($str,1,8);
- $head = "F".$head;
- //获取swf文件内容
- $body = substr($str,8);
- //解压缩文件内容
- $body = gzuncompress($body);
- //合并文件头和内容
- $str = $head.$body;
- //关闭读取的文件流
- fclose($rs);
- //创建一个新的文件
- $ws = fopen("create.swf","w");
- //写文件
- fwrite($ws,$str);
- //关闭文件留
- fclose($ws);
- ?>
注意:gzip数据头比zlib数据头要大,因为它保存了文件名和其他文件系统信息,事实上这是广泛使用的gzip文件的数据头格式。注意zlib函式库本身不能创建一个gzip文件,但是它相当轻松的通过把压缩数据写入到一个有gzip文件头的文件中。
新闻热点
疑难解答