php使用zlib压缩和解压缩文件(swf)
在我们使用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文件
//文件名
$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文件
头的文件中。
补充:Php教程,apache