思想:gzcompress和gzdeflate的區別(15)
昨天寫了一個ZIP打包的代碼片斷,但今天測試有問題,給core.php打包而且有其餘程序的時候解壓時就會有錯。雖然這個問題尚未解決,但對壓縮這塊有了更多的瞭解。昨天我仿造PHPZip類寫了以下一段代碼:
$zdata = gzcompress($data);
$c_len = strlen($zdata);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
但我一直不解其意,爲何要處理一下$zdata,看了後面的註釋fix crc bug也就信覺得真了。但今天看了PclZip的類,代碼以下:
// ----- Compress the content
$v_content = @gzdeflate($v_content);
// ----- Set header parameters
$p_header['compressed_size'] = strlen($v_content);
$p_header['compression'] = 8;
這裏並無fix crc bug。看了 http://cn.php.net/gzdeflate 的評論後纔對這兩個函數差異有了必定的瞭解。
1、gzcompress比gzdeflate前面多了2個字節後面多了4個字節而已。因此壓縮的效率是同樣的。
2、因爲gzcompress前面後面有壓縮信息,在解壓的時候能夠同時處理。因此雙核CPU使用gzuncompress比gzinflate效率高一倍。
3、因爲如今要寫的是ZIP打包程序,不是http 1.1的壓縮傳輸,因此看上面的代碼知道即便使用gzcompress,還得把多餘的信息去掉,瞭解了這兩個的差別之後,我果斷的選擇gzdeflate。固然那個問題還要繼續找。
2012.1.12