+ -
当前位置:首页 → 问答吧 → 这个压缩,解压类很不错(又是老外写的,郁闷)

这个压缩,解压类很不错(又是老外写的,郁闷)

时间:2007-01-23

来源:互联网

复制PHP内容到剪贴板
PHP代码:
//续上.........
    function ExtractFile($header,$to,$zip){
        $header = $this->readfileheader($zip);
        if(substr($to,-1)!="/"){
            $to.="/";
        }
        if(!@is_dir($to)){ 
            @mkdir($to,0777);
        }
        $pth = explode("/",dirname($header['filename']));
        for($i=0;isset($pth[$i]);$i++){
            if(!$pth[$i]){ 
                continue;
            }
            if(!is_dir($to.$pth[$i])){ 
                @mkdir($to.$pth[$i],0777);
            }
        }
        if (!($header['external']==0x41FF0010)&&!($header['external']==16)){
            if ($header['compression']==0){
                $fp = @fopen($to.$header['filename'], 'wb');
                if(!$fp){ 
                    return(-1);
                }
                $size = $header['compressed_size'];
                while ($size != 0){
                    $read_size = ($size < 2048 ? $size : 2048);
                    $buffer = fread($zip, $read_size);
                    $binary_data = pack('a'.$read_size, $buffer);
                    @fwrite($fp, $binary_data, $read_size);
                    $size -= $read_size;
                }
                fclose($fp);
                touch($to.$header['filename'], $header['mtime']);
            }else{
                $fp = @fopen($to.$header['filename'].'.gz','wb');
                if(!$fp){ 
                    return(-1);
                }
                $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
                Chr(0x00), time(), Chr(0x00), Chr(3));
                fwrite($fp, $binary_data, 10);
                $size = $header['compressed_size'];
                while ($size != 0){
                    $read_size = ($size < 1024 ? $size : 1024);
                    $buffer = fread($zip, $read_size);
                    $binary_data = pack('a'.$read_size, $buffer);
                    @fwrite($fp, $binary_data, $read_size);
                    $size -= $read_size;
                }
                $binary_data = pack('VV', $header['crc'], $header['size']);
                fwrite($fp, $binary_data,8); fclose($fp);
                $gzp = @gzopen($to.$header['filename'].'.gz','rb') or die("Cette archive est compress");
                if(!$gzp){ 
                    return(-2);
                }
                $fp = @fopen($to.$header['filename'],'wb');
                if(!$fp){ 
                    return(-1);
                }
                $size = $header['size'];
                while ($size != 0){
                    $read_size = ($size < 2048 ? $size : 2048);
                    $buffer = gzread($gzp, $read_size);
                    $binary_data = pack('a'.$read_size, $buffer);
                    @fwrite($fp, $binary_data, $read_size);
                    $size -= $read_size;
                }
                fclose($fp); gzclose($gzp);
                touch($to.$header['filename'], $header['mtime']);
                @unlink($to.$header['filename'].'.gz');
            }
        }
        return true;
    }
}

//压缩例子
$zip = new ZipLib();
$zip ->add_dir("test");
$zip ->add_File("test","test/test.txt");
$data = $zip ->get_file();
$fp = fopen("test.zip","w");  
fwrite($fp,$data,strlen($data));  
fclose($fp);

作者: muqiao   发布时间: 2007-01-23

恩。。写的漂亮工整。。可惜没有注释

作者: 玉面修罗   发布时间: 2007-01-26

我什么时候能写出这样的程序来

作者: 路人郝   发布时间: 2007-01-26

看不太懂  不过 谁
说下 压缩  压缩什么??

作者: foretell   发布时间: 2007-02-04