<?php$zip = zip_open("/tmp/test2.zip");if ($zip) {    while ($zip_entry = zip_read($zip)) {
        echo "Name:               " . zip_entry_name($zip_entry) . "\n";
        echo "Actual Filesize:    " . zip_entry_filesize($zip_entry) . "\n";
        echo "Compressed Size:    " . zip_entry_compressedsize($zip_entry) . "\n";
        echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "\n";        if (zip_entry_open($zip, $zip_entry, "r")) {
            echo "File Contents:\n";
            $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
            echo "$buf\n";            zip_entry_close($zip_entry);
        }
        echo "\n";    }    zip_close($zip);}?>

解决方案 »

  1.   

    Warning: zip_open() Cannot open zip archive不行呀
      

  2.   

    你没有打开zip扩展,要把zip扩展打开才能用而且,你得确定你有文件操作权限。
      

  3.   

    exec("/usr/local/bin/unzip foo.zip");
    "/usr/local/bin/" 为unzip安装目录
      

  4.   

    ZIP擴展打開著,有文件操作權限。
      

  5.   

    exec("/usr/local/bin/unzip foo.zip");
    "/usr/local/bin/" 为unzip安装目录虛擬主機怎么辦?
      

  6.   

    如果主机是linux,用unzip最好了,linux的命令
      

  7.   

    class SimpleUnzip {
    // 2003-12-02 - HB >
            var $Comment = '';
    // 2003-12-02 - HB <        var $Entries = array();        var $Name = '';        var $Size = 0;        var $Time = 0;        function SimpleUnzip($in_FileName = '') {
                if($in_FileName !== '') {
                    SimpleUnzip::ReadFile($in_FileName);
                }
            } // end of the 'SimpleUnzip' constructor        function Count() {
                return count($this->Entries);
            } // end of the 'Count()' method        function GetData($in_Index) {
                return $this->Entries[$in_Index]->Data;
            } // end of the 'GetData()' method        function GetEntry($in_Index) {
                return $this->Entries[$in_Index];
            } // end of the 'GetEntry()' method        function GetError($in_Index) {
                return $this->Entries[$in_Index]->Error;
            } // end of the 'GetError()' method        function GetErrorMsg($in_Index) {
                return $this->Entries[$in_Index]->ErrorMsg;
            } // end of the 'GetErrorMsg()' method        function GetName($in_Index) {
                return $this->Entries[$in_Index]->Name;
            } // end of the 'GetName()' method        function GetPath($in_Index) {
                return $this->Entries[$in_Index]->Path;
            } // end of the 'GetPath()' method        function GetTime($in_Index) {
                return $this->Entries[$in_Index]->Time;
            } // end of the 'GetTime()' method        function ReadFile($in_FileName) {
                $this->Entries = array();            // Get file parameters
                $this->Name = $in_FileName;
                $this->Time = filemtime($in_FileName);
                $this->Size = filesize($in_FileName);            // Read file
                $oF = fopen($in_FileName, 'rb');
                $vZ = fread($oF, $this->Size);
                fclose($oF);// 2003-12-02 - HB >
                // Cut end of central directory
                $aE = explode("\x50\x4b\x05\x06", $vZ);            // Easiest way, but not sure if format changes
                //$this->Comment = substr($aE[1], 18);            // Normal way
                $aP = unpack('x16/v1CL', $aE[1]);
                $this->Comment = substr($aE[1], 18, $aP['CL']);            // Translates end of line from other operating systems
                $this->Comment = strtr($this->Comment, array("\r\n" => "\n",
                                                             "\r"   => "\n"));
    // 2003-12-02 - HB <            // Cut the entries from the central directory
                $aE = explode("\x50\x4b\x01\x02", $vZ);
                // Explode to each part
                $aE = explode("\x50\x4b\x03\x04", $aE[0]);
                // Shift out spanning signature or empty entry
                array_shift($aE);            // Loop through the entries
                foreach($aE as $vZ) {
                    $aI = array();
                    $aI['E']  = 0;
                    $aI['EM'] = '';
                    // Retrieving local file header information
                    $aP = unpack('v1VN/v1GPF/v1CM/v1FT/v1FD/V1CRC/V1CS/V1UCS/v1FNL', $vZ);
                    // Check if data is encrypted
                    $bE = ($aP['GPF'] && 0x0001) ? TRUE : FALSE;
                    $nF = $aP['FNL'];                // Special case : value block after the compressed data
                    if($aP['GPF'] & 0x0008) {
                        $aP1 = unpack('V1CRC/V1CS/V1UCS', substr($vZ, -12));                    $aP['CRC'] = $aP1['CRC'];
                        $aP['CS']  = $aP1['CS'];
                        $aP['UCS'] = $aP1['UCS'];                    $vZ = substr($vZ, 0, -12);
                    }                // Getting stored filename
                    $aI['N'] = substr($vZ, 26, $nF);                if(substr($aI['N'], -1) == '/') {
                        // is a directory entry - will be skipped
                        continue;
                    }                // Truncate full filename in path and filename
                    $aI['P'] = dirname($aI['N']);
                    $aI['P'] = $aI['P'] == '.' ? '' : $aI['P'];
                    $aI['N'] = basename($aI['N']);                $vZ = substr($vZ, 26 + $nF);                if(strlen($vZ) != $aP['CS']) {
                      $aI['E']  = 1;
                      $aI['EM'] = 'Compressed size is not equal with the value in header information.';
                    } else {
                        if($bE) {
                            $aI['E']  = 5;
                            $aI['EM'] = 'File is encrypted, which is not supported from this class.';
                        } else {
                            switch($aP['CM']) {
                                case 0: // Stored
                                    // Here is nothing to do, the file ist flat.
                                    break;                            case 8: // Deflated
                                    $vZ = gzinflate($vZ);
                                    break;                            case 12: // BZIP2
    // 2003-12-02 - HB >
                                    if(! extension_loaded('bz2')) {
                                        if(strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
                                          @dl('php_bz2.dll');
                                        } else {
                                          @dl('bz2.so');
                                        }
                                    }                                if(extension_loaded('bz2')) {
    // 2003-12-02 - HB <
                                        $vZ = bzdecompress($vZ);
    // 2003-12-02 - HB >
                                    } else {
                                        $aI['E']  = 7;
                                        $aI['EM'] = "PHP BZIP2 extension not available.";
                                    }
    // 2003-12-02 - HB <                                break;                            default:
                                  $aI['E']  = 6;
                                  $aI['EM'] = "De-/Compression method {$aP['CM']} is not supported.";
                            }// 2003-12-02 - HB >
                            if(! $aI['E']) {
    // 2003-12-02 - HB <
                                if($vZ === FALSE) {
                                    $aI['E']  = 2;
                                    $aI['EM'] = 'Decompression of data failed.';
                                } else {
                                    if(strlen($vZ) != $aP['UCS']) {
                                        $aI['E']  = 3;
                                        $aI['EM'] = 'Uncompressed size is not equal with the value in header information.';
                                    } else {
                                        if(crc32($vZ) != $aP['CRC']) {
                                            $aI['E']  = 4;
                                            $aI['EM'] = 'CRC32 checksum is not equal with the value in header information.';
                                        }
                                    }
                                }
    // 2003-12-02 - HB >
                            }
    // 2003-12-02 - HB <
                        }
                    }                $aI['D'] = $vZ;                // DOS to UNIX timestamp
                    $aI['T'] = mktime(($aP['FT']  & 0xf800) >> 11,
                                      ($aP['FT']  & 0x07e0) >>  5,
                                      ($aP['FT']  & 0x001f) <<  1,
                                      ($aP['FD']  & 0x01e0) >>  5,
                                      ($aP['FD']  & 0x001f),
                                      (($aP['FD'] & 0xfe00) >>  9) + 1980);                $this->Entries[] = &new SimpleUnzipEntry($aI);
                } // end for each entries            return $this->Entries;
    } // end of the 'ReadFile()' method
    } // end of the 'SimpleUnzip' class
      

  8.   

    class SimpleUnzipEntry {
            var $Data = '';        var $Error = 0;        var $ErrorMsg = '';        var $Name = '';        var $Path = '';        var $Time = 0;        function SimpleUnzipEntry($in_Entry) {
    $this->Data     = $in_Entry['D'];
    $this->Error    = $in_Entry['E'];
    $this->ErrorMsg = $in_Entry['EM'];
    $this->Name     = $in_Entry['N'];
    $this->Path     = $in_Entry['P'];
    $this->Time     = $in_Entry['T'];
            } // end of the 'SimpleUnzipEntry' constructor
    } // end of the 'SimpleUnzipEntry' class
      

  9.   

    To: iasky(iasky)請問怎么用?$myfile = "myxml.zip";
    $unzip = new SimpleUnzip();
    print_r($unzip->readfile($myfile));
    可以輸入,我要的是解壓,請幫助,謝謝。
      

  10.   

    楼主你可以找一个现在成的class来用,相当方便
    www.phpe.net上有下载
      

  11.   

    搞的那么复杂么?
    一个函数就可以搞定啊
    把$file包中的文件全部解压到$fileDir中。  function unzip ($file,$fileDir) {
    if (!function_exists(zip_open)) exit("zip_* functions not found! Please check your php environment!");
    $zip = zip_open($file);
    if ($zip) {
    while ($zip_entry = zip_read($zip)) {
    $name = zip_entry_name($zip_entry);
    if (zip_entry_open($zip, $zip_entry, "r")) {
    $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
    $newName=microtime().zip_entry_name($zip_entry); // create a new name for saving pic
    $fileHandle=fopen("$fileDir/$newName",'w+'); // Write to a new file 
    fwrite($fileHandle,$buf,zip_entry_filesize($zip_entry));
    fclose($fileHandle);
    zip_entry_close($zip_entry);
    }else{
    return false;
    }
    }
    return zip_close($zip);
    }
    }
      

  12.   

    只弄过压缩成zip,没有尝试过解压缩。
    先顶下。
      

  13.   

    faisun_unzip -在线解压ZIP文件程序 V1.0http://www.softpure.com/html/show_details/82.htm
      

  14.   

    To:回复人:szjq() ( 二级(初级)) 信誉:96  2007-4-24 17:02:06  得分:0楼主你可以找一个现在成的class来用,相当方便
    www.phpe.net上有下载我去下載了,解壓文件夾時出錯。有改正的源碼發一份謝謝。[email protected]
      

  15.   

    下载一个类,域者用内置的 php5.1.6内置了
      

  16.   

    樓上的給我郵箱發一份謝謝 [email protected]  ,我結帖了。