男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站

壓縮過(guò)濾器

雖然 壓縮封裝協(xié)議 提供了在本地文件系統中 創(chuàng )建 gzip 和 bz2 兼容文件的方法,但不代表可以在網(wǎng)絡(luò )的流中提供通用壓縮的意思, 也不代表可以將一個(gè)非壓縮的流轉換成一個(gè)壓縮流。對此,壓縮過(guò)濾器可以在任何時(shí)候應用于任何流資源。

注意: 壓縮過(guò)濾器產(chǎn)生命令行工具如 gzip 的頭和尾信息。只是壓縮和解壓數據流中的有效載荷部分。

zlib.deflate 和 zlib.inflate

zlib.deflate(壓縮)和 zlib.inflate(解壓)實(shí)現了定義與 ? RFC 1951 的壓縮算法。 deflate 過(guò)濾器可以接受以一個(gè)關(guān)聯(lián)數組傳遞的最多三個(gè)參數。 level定義了壓縮強度(1-9)。 數字更高通常會(huì )產(chǎn)生更小的載荷,但要消耗更多的處理時(shí)間。 存在兩個(gè)特殊壓縮等級:0(完全不壓縮)和 -1(zlib 內部默認值,目前是 6)。 window是壓縮回溯窗口大小,以二的次方表示。 更高的值(大到 15 —— 32768 字節)產(chǎn)生更好的壓縮效果但消耗更多內存, 低的值(低到 9 —— 512 字節)產(chǎn)生產(chǎn)生較差的壓縮效果但內存消耗低。 目前默認的 window 大小是 15。 memory用來(lái)指示要分配多少工作內存。 合法的數值范圍是從 1(最小分配)到 9(最大分配)。 內存分配僅影響速度,不會(huì )影響生成的載荷的大小。

注意: 因為最常用的參數是壓縮等級,也可以提供一個(gè)整數值作為此參數(而不用數組)。

在激活 zlib 的前提下可以使用 zlib.* 壓縮過(guò)濾器。

示例 #1 zlib.deflatezlib.inflate

<?php
$params 
= array('level' => 6'window' => 15'memory' => 9);

$original_text "This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo 
"The original text is " strlen($original_text) . " characters long.\n";

$fp fopen('test.deflated''w');
stream_filter_append($fp'zlib.deflate'STREAM_FILTER_WRITE$params);
fwrite($fp$original_text);
fclose($fp);

echo 
"The compressed file is " filesize('test.deflated') . " bytes long.\n";
echo 
"The original text was:\n";
/* 使用 readfile 和 zlib.inflate 即時(shí)解壓縮 */
readfile('php://filter/zlib.inflate/resource=test.deflated');

/* 生成的輸出:

The original text is 70 characters long.
The compressed file is 56 bytes long.
The original text was:
This is a test.
This is only a test.
This is not an important string.

 */
?>

示例 #2 zlib.deflate 簡(jiǎn)單參數用法

<?php
$original_text 
"This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo 
"The original text is " strlen($original_text) . " characters long.\n";

$fp fopen('test.deflated''w');
/* 這里的 “6” 代表壓縮級別為 6 */
stream_filter_append($fp'zlib.deflate'STREAM_FILTER_WRITE6);
fwrite($fp$original_text);
fclose($fp);

echo 
"The compressed file is " filesize('test.deflated') . " bytes long.\n";

/* 生成的輸出:

The original text is 70 characters long.
The compressed file is 56 bytes long.

 */
?>

bzip2.compress 和 bzip2.decompress

bzip2.compressbzip2.decompress 工作的方式與上面講的 zlib 過(guò)濾器相同。 bzip2.compress 過(guò)濾器接受以一個(gè)關(guān)聯(lián)數組給出的最多兩個(gè)參數: blocks 是從 1 到 9 的整數值,指定分配多少個(gè) 100K 字節的內存塊作為工作區。 work 是 0 到 250 的整數值,指定在退回到一個(gè)慢一些, 但更可靠的算法之前做多少次常規壓縮算法的嘗試。調整此參數僅影響到速度, 壓縮輸出和內存使用都不受此設置的影響。將此參數設為 0 指示 bzip 庫使用內部默認算法。 bzip2.decompress 過(guò)濾器僅接受一個(gè)參數,可以用普通的布爾值傳遞, 或者用一個(gè)關(guān)聯(lián)數組中的 small 單元傳遞。 當 small 設為 &true; 值時(shí),指示 bzip 庫用最小的內存占用來(lái)執行解壓縮, 代價(jià)是速度會(huì )慢一些。

在激活 bz2 支持的前提下可以使用 bzip2.* 壓縮過(guò)濾器。

示例 #3 bzip2.compressbzip2.decompress

<?php
$param 
= array('blocks' => 9'work' => 0);

echo 
"The original file is " filesize('LICENSE') . " bytes long.\n";

$fp fopen('LICENSE.compressed''w');
stream_filter_append($fp'bzip2.compress'STREAM_FILTER_WRITE$param);
fwrite($fpfile_get_contents('LICENSE'));
fclose($fp);

echo 
"The compressed file is " filesize('LICENSE.compressed') . " bytes long.\n";

/* 生成的輸出:

The original text is 3288 characters long.
The compressed file is 1488 bytes long.

 */
?>
男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站