本文章利用一個實例來介紹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函數(shù)來操作,如:
- <?php
- ini_set("zlib.output_compression", "On");
- ?>
- <?php
- ini_set("zlib.output_compression", 4096);
- ?>
好了現(xiàn)在萬事具備了我們來入正文件,壓縮swf文件:
- <?php
- //文件名
- $filename = "test.swf";
- //打開文件
- $rs = fopen($filename,"r");
- //讀取文件的數(shù)據(jù)
- $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);
- //創(chuàng)建一個新的文件
- $ws = fopen("create.swf","w");
- //寫文件
- fwrite($ws,$str);
- //關閉文件留
- fclose($ws);
- ?>
解壓flash swf文件
- <?php
- //文件名
- $filename = "test.swf";
- //打開文件
- $rs = fopen($filename,"r");
- //讀取文件的數(shù)據(jù)
- $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);
- //創(chuàng)建一個新的文件
- $ws = fopen("create.swf","w");
- //寫文件
- fwrite($ws,$str);
- //關閉文件留
- fclose($ws);
- ?>
注意:gzip數(shù)據(jù)頭比zlib數(shù)據(jù)頭要大,因為它保存了文件名和其他文件系統(tǒng)信息,事實上這是廣泛使用的gzip文件的數(shù)據(jù)頭格式。注意zlib函式庫本身不能創(chuàng)建一個gzip文件,但是它相當輕松的通過把壓縮數(shù)據(jù)寫入到一個有gzip文件頭的文件中。
新聞熱點
疑難解答