博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php上传zip文件在线解压文件在指定目录下,CI框架版本
阅读量:4312 次
发布时间:2019-06-06

本文共 22346 字,大约阅读时间需要 74 分钟。

我从网上找的文件php在线解压zip压缩文件

文件为jy.php可以直接执行,但是怎样将其加到CI框架中呢??

jy.php文件

1 
6 7 8
9 在线解压ZIP文件程序 V1.0 10 26 27 28 29
30
33 34
43 44
45
46
50
51
52
53
65
66
67
68
69
70
71
72
74
75
76
77
79
80
81
82
83
84

在线解压ZIP文件程序 V1.0

47

使用方法:把zip文件通过FTP上传到本文件相同的目录下,选择zip文件;或直接点击“浏览...”上传zip文件。

48

 

49
选择ZIP文件:
或上传文件:
解压到目录: 73 (留空为本目录,必须有写入权限)
验证密码: 78 (源文件中设定的密码)
85 86
ReadCentralDir($zip,$zn);102 $pos_entry = $cdir['offset'];103 104 if(!is_array($index)){ $index = array($index); }105 for($i=0; $index[$i];$i++){106 if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])107 return(-1);108 }109 for ($i=0; $i<$cdir['entries']; $i++)110 {111 @fseek($zip, $pos_entry);112 $header = $this->ReadCentralFileHeaders($zip);113 $header['index'] = $i; $pos_entry = ftell($zip);114 @rewind($zip); fseek($zip, $header['offset']);115 if(in_array("-1",$index)||in_array($i,$index))116 $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);117 }118 fclose($zip);119 return $stat;120 }121 122 function ReadFileHeader($zip)123 {124 $binary_data = fread($zip, 30);125 $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);126 127 $header['filename'] = fread($zip, $data['filename_len']);128 if ($data['extra_len'] != 0) {129 $header['extra'] = fread($zip, $data['extra_len']);130 } else { $header['extra'] = ''; }131 132 $header['compression'] = $data['compression'];$header['size'] = $data['size'];133 $header['compressed_size'] = $data['compressed_size'];134 $header['crc'] = $data['crc']; $header['flag'] = $data['flag'];135 $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];136 137 if ($header['mdate'] && $header['mtime']){138 $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;139 $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;140 $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;141 $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);142 }else{$header['mtime'] = time();}143 144 $header['stored_filename'] = $header['filename'];145 $header['status'] = "ok";146 return $header;147 }148 149 function ReadCentralFileHeaders($zip){150 $binary_data = fread($zip, 46);151 $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);152 153 if ($header['filename_len'] != 0)154 $header['filename'] = fread($zip,$header['filename_len']);155 else $header['filename'] = '';156 157 if ($header['extra_len'] != 0)158 $header['extra'] = fread($zip, $header['extra_len']);159 else $header['extra'] = '';160 161 if ($header['comment_len'] != 0)162 $header['comment'] = fread($zip, $header['comment_len']);163 else $header['comment'] = '';164 165 if ($header['mdate'] && $header['mtime'])166 {167 $hour = ($header['mtime'] & 0xF800) >> 11;168 $minute = ($header['mtime'] & 0x07E0) >> 5;169 $seconde = ($header['mtime'] & 0x001F)*2;170 $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;171 $month = ($header['mdate'] & 0x01E0) >> 5;172 $day = $header['mdate'] & 0x001F;173 $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);174 } else {175 $header['mtime'] = time();176 }177 $header['stored_filename'] = $header['filename'];178 $header['status'] = 'ok';179 if (substr($header['filename'], -1) == '/')180 $header['external'] = 0x41FF0010;181 return $header;182 }183 184 function ReadCentralDir($zip,$zip_name){185 $size = filesize($zip_name);186 187 if ($size < 277) $maximum_size = $size;188 else $maximum_size=277;189 190 @fseek($zip, $size-$maximum_size);191 $pos = ftell($zip); $bytes = 0x00000000;192 193 while ($pos < $size){194 $byte = @fread($zip, 1); $bytes=($bytes << 8) | ord($byte);195 if ($bytes == 0x504b0506 or $bytes == 0x2e706870504b0506){ $pos++;break;} $pos++;196 }197 198 $fdata=fread($zip,18);199 200 $data=@unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',$fdata);201 202 if ($data['comment_size'] != 0) $centd['comment'] = fread($zip, $data['comment_size']);203 else $centd['comment'] = ''; $centd['entries'] = $data['entries'];204 $centd['disk_entries'] = $data['disk_entries'];205 $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];206 $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];207 return $centd;208 }209 210 function ExtractFile($header,$to,$zip){211 $header = $this->readfileheader($zip);212 213 if(substr($to,-1)!="/") $to.="/";214 if($to=='./') $to = ''; 215 $pth = explode("/",$to.$header['filename']);216 $mydir = '';217 for($i=0;$i
total_folders==0)) && is_dir($mydir)) ){221 @chmod($mydir,0777);222 $this->total_folders ++;223 echo "
目录: $mydir
";224 }225 }226 227 if(strrchr($header['filename'],'/')=='/') return; 228 229 if (!($header['external']==0x41FF0010)&&!($header['external']==16)){230 if ($header['compression']==0){231 $fp = @fopen($to.$header['filename'], 'wb');232 if(!$fp) return(-1);233 $size = $header['compressed_size'];234 235 while ($size != 0){236 $read_size = ($size < 2048 ? $size : 2048);237 $buffer = fread($zip, $read_size);238 $binary_data = pack('a'.$read_size, $buffer);239 @fwrite($fp, $binary_data, $read_size);240 $size -= $read_size;241 }242 fclose($fp);243 touch($to.$header['filename'], $header['mtime']);244 }else{245 $fp = @fopen($to.$header['filename'].'.gz','wb');246 if(!$fp) return(-1);247 $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),248 Chr(0x00), time(), Chr(0x00), Chr(3));249 250 fwrite($fp, $binary_data, 10);251 $size = $header['compressed_size'];252 253 while ($size != 0){254 $read_size = ($size < 1024 ? $size : 1024);255 $buffer = fread($zip, $read_size);256 $binary_data = pack('a'.$read_size, $buffer);257 @fwrite($fp, $binary_data, $read_size);258 $size -= $read_size;259 }260 261 $binary_data = pack('VV', $header['crc'], $header['size']);262 fwrite($fp, $binary_data,8); fclose($fp);263 264 $gzp = @gzopen($to.$header['filename'].'.gz','rb') or die("Cette archive est compress閑");265 if(!$gzp) return(-2);266 $fp = @fopen($to.$header['filename'],'wb');267 if(!$fp) return(-1);268 $size = $header['size'];269 270 while ($size != 0){271 $read_size = ($size < 2048 ? $size : 2048);272 $buffer = gzread($gzp, $read_size);273 $binary_data = pack('a'.$read_size, $buffer);274 @fwrite($fp, $binary_data, $read_size);275 $size -= $read_size;276 }277 fclose($fp); gzclose($gzp);278 279 touch($to.$header['filename'], $header['mtime']);280 @unlink($to.$header['filename'].'.gz');281 282 }283 }284 285 $this->total_files ++;286 echo "
文件: $to$header[filename]
";287 288 return true;289 }290 291 // end class292 }293 294 set_time_limit(0);295 296 if ($_POST['password'] != $password) die("输入的密码不正确,请重新输入。");297 if(!$_POST["todir"]) $_POST["todir"] = ".";298 $z = new Zip;299 $have_zip_file = 0;300 function start_unzip($tmp_name,$new_name,$checked){301 global $_POST,$z,$have_zip_file;302 $upfile = array("tmp_name"=>$tmp_name,"name"=>$new_name);303 if(is_file($upfile[tmp_name])){304 $have_zip_file = 1;305 echo "
正在解压:
$upfile[name]
";306 if(preg_match('/\.zip$/mis',$upfile[name])){307 $result=$z->Extract($upfile[tmp_name],$_POST["todir"]);308 if($result==-1){309 echo "
文件 $upfile[name] 错误.
";310 }311 echo "
完成,共建立 $z->total_folders 个目录,$z->total_files 个文件.
";312 }else{313 echo "
$upfile[name] 不是 zip 文件.
"; 314 }315 if(realpath($upfile[name])!=realpath($upfile[tmp_name])){316 @unlink($upfile[name]);317 rename($upfile[tmp_name],$upfile[name]);318 }319 }320 }321 clearstatcache();322 323 start_unzip($_POST["zipfile"],$_POST["zipfile"],0);324 start_unzip($_FILES["upfile"][tmp_name],$_FILES["upfile"][name],1);325 326 if(!$have_zip_file){327 echo "
请选择或上传文件.
";328 }329 ?>330
331
332
333 334
335 336
347
";355 if(is_array($dfile)){356 for($i=count($dfile)-1;$i>=0;$i--){357 if(is_file($dfile[$i])){358 if(@unlink($dfile[$i])){359 echo "已删除文件: $dfile[$i]
";360 }else{361 echo "删除文件失败: $dfile[$i]
";362 }363 }else{364 if(@rmdir($dfile[$i])){365 echo "已删除目录: $dfile[$i]
";366 }else{367 echo "删除目录失败: $dfile[$i]
";368 } 369 }370 371 }372 }373 echo "
完成.
374
";375 376 endif;377 378 ?>379 380
View Code

CI框架中我们先建立显示页面

views/informaction_zip.php

1  3  4  5 
11 12
13 14 30 31 32 33
34 35 36

使用方法:直接点击“浏览...”上传zip文件,这里的文件只能是zip文件,zip文件和子文件以英文命名。

 

37
38 39 40 41
42
43
44
45
46
47 48
49
50 51
52
53
54
55
上传文件:
56
57 58 59 60
View Code

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 ?>
View Code

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 ?>
View Code

 

 

转载于:https://www.cnblogs.com/wang3680/p/3237862.html

你可能感兴趣的文章
soTower框架学习(一)
查看>>
测试与发布
查看>>
Timus 1014. Product of Digits
查看>>
14软件工程第七次作业
查看>>
继承的特点与注意事项
查看>>
C02面向对象
查看>>
Thunder团队第二周 - Scrum会议2
查看>>
转 sql删除重复记录
查看>>
Yum数据库错误
查看>>
HDOJ树形DP专题之考研路茫茫——空调教室
查看>>
《结对-蓝牙考勤系统-测试过程》
查看>>
PAT 1034. Head of a Gang
查看>>
微信分享
查看>>
《数据结构》第1章:绪论
查看>>
基于域名的虚拟主机(最常用)
查看>>
第八讲 shiro 整合 ssm
查看>>
Lucene
查看>>
[LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项
查看>>
CNN反卷积理解
查看>>
chrome 中firstChild老是出错
查看>>