PHP 解压zip 问题 ,MAC系统上传zip文件到网站,网站使用PHPzip解压,出错,,,win上传则正常有没有大牛告诉我怎么解决这个问题啊。

解决方案 »

  1.   

     private 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; }
                    $pthss .= $pth[$i]."/";
                    if(!is_dir($to.$pthss)){ @mkdir($to.$pthss, 0777); }
                }

               // $to.$header['filename']  = iconv("utf-8","gb2312",$to.$header['filename'] );
       $toheaderfilename=iconv("utf-8","gb2312",$to.$header['filename'] );
                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;
            }