⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unzip.lib.php

📁 架設ROSE私服必備之物 ROSE數據庫
💻 PHP
📖 第 1 页 / 共 2 页
字号:
            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    /**     *  Entry of the ZIP file.     *     *  @category   phpPublic     *  @package    File-Formats-ZIP     *  @subpackage Unzip     *  @version    1.0     *  @author     Holger Boskugel <vbwebprofi@gmx.de>     *  @example    example.unzip.php Two examples     */    class SimpleUnzipEntry {        /**         *  Data of the file entry         *         *  @var    mixed         *  @access public         *  @see    SimpleUnzipEntry()         *  @since  1.0         */        var $Data = '';        /**         *  Error of the file entry         *         *  - 0 : No error raised.<BR>         *  - 1 : Compressed size is not equal with the value in header information.<BR>         *  - 2 : Decompression of data failed.<BR>         *  - 3 : Uncompressed size is not equal with the value in header information.<BR>         *  - 4 : CRC32 checksum is not equal with the value in header information.<BR>         *  - 5 : File is encrypted, which is not supported from this class.<BR>         *  - 6 : De-/Compression method ... is not supported.<BR>         *  - 7 : PHP BZIP2 extension not available.         *         *  @var    integer         *  @access public         *  @see    SimpleUnzipEntry()         *  @since  1.0         */        var $Error = 0;        /**         *  Error message of the file entry         *         *  @var    string         *  @access public         *  @see    SimpleUnzipEntry()         *  @since  1.0         */        var $ErrorMsg = '';        /**         *  File name of the file entry         *         *  @var    string         *  @access public         *  @see    SimpleUnzipEntry()         *  @since  1.0         */        var $Name = '';        /**         *  File path of the file entry         *         *  @var    string         *  @access public         *  @see    SimpleUnzipEntry()         *  @since  1.0         */        var $Path = '';        /**         *  File time of the file entry (unix timestamp)         *         *  @var    integer         *  @access public         *  @see    SimpleUnzipEntry()         *  @since  1.0         */        var $Time = 0;        /**         *  Contructor of the class         *         *  @param  array               Entry datas         *  @return SimpleUnzipEntry    Instanced class         *  @access public         *  @since  1.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?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -