Heim  >  Artikel  >  Backend-Entwicklung  >  php怎么压缩一个文件夹里面所有的文件到zip文件里面

php怎么压缩一个文件夹里面所有的文件到zip文件里面

WBOY
WBOYOriginal
2016-06-13 13:13:041067Durchsuche

php如何压缩一个文件夹里面所有的文件到zip文件里面?
php如何压缩一个文件夹里面所有的文件到zip文件里面?

如我的localhost下有个test文件夹,内部有很多文件和文件夹,如何把test里面所有东西打包成 test.zip?

------解决方案--------------------

PHP code

    Function ReadFileHeader($zip){
        $binary_data = fread($zip, 30);
        $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);

        $header['filename'] = fread($zip, $data['filename_len']);
        IF($data['extra_len'] != 0){$header['extra'] = fread($zip, $data['extra_len']);}Else{$header['extra'] = '';}

        $header['compression'] = $data['compression'];
        $header['size'] = $data['size'];
        $header['compressed_size'] = $data['compressed_size'];
        $header['crc'] = $data['crc'];
        $header['flag'] = $data['flag'];
        $header['mdate'] = $data['mdate'];
        $header['mtime'] = $data['mtime'];

        IF($header['mdate'] && $header['mtime']){
            $hour = ($header['mtime']&0xF800) >> 11;
            $minute = ($header['mtime']&0x07E0) >> 5;
            $seconde = ($header['mtime']&0x001F) * 2;
            $year = (($header['mdate']&0xFE00) >> 9) + 1980;
            $month = ($header['mdate']&0x01E0) >> 5;
            $day = $header['mdate']&0x001F;
            $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
        }Else{
            $header['mtime'] = time();
        }

        $header['stored_filename'] = $header['filename'];
        $header['status'] = "ok";
        Return $header;
    }

    Function ReadCentralFileHeaders($zip){
        $binary_data = fread($zip, 46);
        $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);

        IF($header['filename_len'] != 0)
            $header['filename'] = fread($zip, $header['filename_len']);
        Else $header['filename'] = '';

        IF($header['extra_len'] != 0)
            $header['extra'] = fread($zip, $header['extra_len']);
        Else $header['extra'] = '';

        IF($header['comment_len'] != 0)
            $header['comment'] = fread($zip, $header['comment_len']);
        Else $header['comment'] = '';

        IF($header['mdate'] && $header['mtime']){
            $hour = ($header['mtime'] &0xF800) >> 11;
            $minute = ($header['mtime'] &0x07E0) >> 5;
            $seconde = ($header['mtime'] &0x001F) * 2;
            $year = (($header['mdate'] &0xFE00) >> 9) + 1980;
            $month = ($header['mdate'] &0x01E0) >> 5;
            $day = $header['mdate'] &0x001F;
            $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
        }Else{
            $header['mtime'] = time();
        }
        $header['stored_filename'] = $header['filename'];
        $header['status'] = 'ok';
        IF(substr($header['filename'], -1) == '/')
            $header['external'] = 0x41FF0010;
        Return $header;
    }

    Function ReadCentralDir($zip, $zip_name){
        $size = filesize($zip_name);
        IF($size  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;
            $pthss .= $pth[$i] . "/";
            IF(!is_dir($to . $pthss)) @mkdir($to . $pthss, 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 
                 
              
              
        
            
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn