我从网上找的文件php在线解压zip压缩文件
文件为jy.php可以直接执行,但是怎样将其加到CI框架中呢??
jy.php文件
1 6 7 8 9在线解压ZIP文件程序 V1.0 10 26 27 28 29
CI框架中我们先建立显示页面
views/informaction_zip.php
1 3 4 5 11 12 1357 58 59 6014 30 31 32 33
controllers/zip.php
1 load->helper('url');15 $this->load->model("m_zip");16 error_reporting(1);17 }18 19 //显示zip文件录入信息界面20 public function index() {21 $this->load->view('admin/subject/information_zip');22 }23 //处理zip信息界面24 public function zipUtil() {25 if (!$_POST["todir"])26 $_POST["todir"] = ".";27 clearstatcache();28 // echo $_FILES["upfile"]["tmp_name"];29 $this->start_unzip($_FILES["upfile"]["tmp_name"], $_FILES["upfile"]["name"], 1);30 }31 function start_unzip($tmp_name, $new_name, $checked) {32 $have_zip_file = 0;33 $upfile = array (34 "tmp_name" => $tmp_name,35 "name" => $new_name36 );37 if (is_file($upfile["tmp_name"])) {38 $have_zip_file = 1;39 $z = $this->m_zip;40 echo "正在解压: $upfile[name]";41 if (preg_match('/\.zip$/mis', $upfile["name"])) {42 $result = $z->Extract($upfile["tmp_name"], $_POST["todir"]);43 if ($result == -1) {44 echo "文件 $upfile[name] 错误.";45 }46 echo "完成,$z->total_files 个文件.";47 48 49 } else {50 echo "$upfile[name] 不是 zip 文件.";51 }52 if (realpath($upfile["name"]) != realpath($upfile["tmp_name"])) {53 @ unlink($upfile["name"]);54 rename($upfile["tmp_name"], $upfile["name"]);55 unlink($upfile["name"]);56 }57 }58 59 }60 }61 ?>
models/m_zip.php
1 ReadCentralDir($zip, $zn); 14 $pos_entry = $cdir['offset']; 15 16 if (!is_array($index)) { 17 $index = array ( 18 $index 19 ); 20 } 21 for ($i = 0; $index[$i]; $i++) { 22 if (intval($index[$i]) != $index[$i] || $index[$i] > $cdir['entries']) 23 return (-1); 24 } 25 for ($i = 0; $i < $cdir['entries']; $i++) { 26 @ fseek($zip, $pos_entry); 27 $header = $this->ReadCentralFileHeaders($zip); 28 $header['index'] = $i; 29 $pos_entry = ftell($zip); 30 @ rewind($zip); 31 fseek($zip, $header['offset']); 32 if (in_array("-1", $index) || in_array($i, $index)) 33 $stat[$header['filename']] = $this->ExtractFile($header, $to, $zip); 34 } 35 fclose($zip); 36 return $stat; 37 } 38 39 function ReadFileHeader($zip) { 40 $binary_data = fread($zip, 30); 41 $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data); 42 43 $header['filename'] = fread($zip, $data['filename_len']); 44 if ($data['extra_len'] != 0) { 45 $header['extra'] = fread($zip, $data['extra_len']); 46 } else { 47 $header['extra'] = ''; 48 } 49 50 $header['compression'] = $data['compression']; 51 $header['size'] = $data['size']; 52 $header['compressed_size'] = $data['compressed_size']; 53 $header['crc'] = $data['crc']; 54 $header['flag'] = $data['flag']; 55 $header['mdate'] = $data['mdate']; 56 $header['mtime'] = $data['mtime']; 57 58 if ($header['mdate'] && $header['mtime']) { 59 $hour = ($header['mtime'] & 0xF800) >> 11; 60 $minute = ($header['mtime'] & 0x07E0) >> 5; 61 $seconde = ($header['mtime'] & 0x001F) * 2; 62 $year = (($header['mdate'] & 0xFE00) >> 9) + 1980; 63 $month = ($header['mdate'] & 0x01E0) >> 5; 64 $day = $header['mdate'] & 0x001F; 65 $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); 66 } else { 67 $header['mtime'] = time(); 68 } 69 70 $header['stored_filename'] = $header['filename']; 71 $header['status'] = "ok"; 72 return $header; 73 } 74 75 function ReadCentralFileHeaders($zip) { 76 $binary_data = fread($zip, 46); 77 $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); 78 79 if ($header['filename_len'] != 0) 80 $header['filename'] = fread($zip, $header['filename_len']); 81 else 82 $header['filename'] = ''; 83 84 if ($header['extra_len'] != 0) 85 $header['extra'] = fread($zip, $header['extra_len']); 86 else 87 $header['extra'] = ''; 88 89 if ($header['comment_len'] != 0) 90 $header['comment'] = fread($zip, $header['comment_len']); 91 else 92 $header['comment'] = ''; 93 94 if ($header['mdate'] && $header['mtime']) { 95 $hour = ($header['mtime'] & 0xF800) >> 11; 96 $minute = ($header['mtime'] & 0x07E0) >> 5; 97 $seconde = ($header['mtime'] & 0x001F) * 2; 98 $year = (($header['mdate'] & 0xFE00) >> 9) + 1980; 99 $month = ($header['mdate'] & 0x01E0) >> 5;100 $day = $header['mdate'] & 0x001F;101 $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);102 } else {103 $header['mtime'] = time();104 }105 $header['stored_filename'] = $header['filename'];106 $header['status'] = 'ok';107 if (substr($header['filename'], -1) == '/')108 $header['external'] = 0x41FF0010;109 return $header;110 }111 112 function ReadCentralDir($zip, $zip_name) {113 $size = filesize($zip_name);114 115 if ($size < 277)116 $maximum_size = $size;117 else118 $maximum_size = 277;119 120 @ fseek($zip, $size - $maximum_size);121 $pos = ftell($zip);122 $bytes = 0x00000000;123 124 while ($pos < $size) {125 $byte = @ fread($zip, 1);126 $bytes = ($bytes << 8) | ord($byte);127 if ($bytes == 0x504b0506 or $bytes == 0x2e706870504b0506) {128 $pos++;129 break;130 }131 $pos++;132 }133 134 $fdata = fread($zip, 18);135 136 $data = @ unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $fdata);137 138 if ($data['comment_size'] != 0)139 $centd['comment'] = fread($zip, $data['comment_size']);140 else141 $centd['comment'] = '';142 $centd['entries'] = $data['entries'];143 $centd['disk_entries'] = $data['disk_entries'];144 $centd['offset'] = $data['offset'];145 $centd['disk_start'] = $data['disk_start'];146 $centd['size'] = $data['size'];147 $centd['disk'] = $data['disk'];148 return $centd;149 }150 151 function ExtractFile($header, $to, $zip) {152 $header = $this->readfileheader($zip);153 154 if (substr($to, -1) != "/")155 $to .= "/";156 if ($to == './')157 $to = '';158 $pth = explode("/", $to . $header['filename']);159 $mydir = '';160 for ($i = 0; $i < count($pth) - 1; $i++) {161 if (!$pth[$i])162 continue;163 $mydir .= $pth[$i] . "/";164 if ((!is_dir($mydir) && @ mkdir($mydir, 0777)) || (($mydir == $to . $header['filename'] || ($mydir == $to && $this->total_folders == 0)) && is_dir($mydir))) {165 @ chmod($mydir, 0777);166 $this->total_folders++;167 echo " 目录: $mydir";168 }169 }170 171 if (strrchr($header['filename'], '/') == '/')172 return;173 174 if (!($header['external'] == 0x41FF0010) && !($header['external'] == 16)) {175 if ($header['compression'] == 0) {176 $fp = @ fopen($to . $header['filename'], 'wb');177 if (!$fp)178 return (-1);179 $size = $header['compressed_size'];180 181 while ($size != 0) {182 $read_size = ($size < 2048 ? $size : 2048);183 $buffer = fread($zip, $read_size);184 $binary_data = pack('a' . $read_size, $buffer);185 @ fwrite($fp, $binary_data, $read_size);186 $size -= $read_size;187 }188 fclose($fp);189 touch($to . $header['filename'], $header['mtime']);190 } else {191 $fp = @ fopen($to . $header['filename'] . '.gz', 'wb');192 if (!$fp)193 return (-1);194 $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']), Chr(0x00), time(), Chr(0x00), Chr(3));195 196 fwrite($fp, $binary_data, 10);197 $size = $header['compressed_size'];198 199 while ($size != 0) {200 $read_size = ($size < 1024 ? $size : 1024);201 $buffer = fread($zip, $read_size);202 $binary_data = pack('a' . $read_size, $buffer);203 @ fwrite($fp, $binary_data, $read_size);204 $size -= $read_size;205 }206 207 $binary_data = pack('VV', $header['crc'], $header['size']);208 fwrite($fp, $binary_data, 8);209 fclose($fp);210 211 $gzp = @ gzopen($to . $header['filename'] . '.gz', 'rb') or die("Cette archive est compress閑");212 if (!$gzp)213 return (-2);214 $fp = @ fopen($to . $header['filename'], 'wb');215 if (!$fp)216 return (-1);217 $size = $header['size'];218 219 while ($size != 0) {220 $read_size = ($size < 2048 ? $size : 2048);221 $buffer = gzread($gzp, $read_size);222 $binary_data = pack('a' . $read_size, $buffer);223 @ fwrite($fp, $binary_data, $read_size);224 $size -= $read_size;225 }226 fclose($fp);227 gzclose($gzp);228 229 touch($to . $header['filename'], $header['mtime']);230 @ unlink($to . $header['filename'] . '.gz');231 232 }233 }234 235 $this->total_files++;236 echo " 文件: $to$header[filename]";237 238 return true;239 }240 241 // end class242 }243 ?>