博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
刷题总结——次小生成树(bzoj1977 最小生成树+倍增)
查看>>
html5-2 html实体和颜色有哪些
查看>>
饺紫猫配色教程
查看>>
第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能...
查看>>
第八十节,CSS3边框图片效果
查看>>
第一百九十五节,jQuery EasyUI,Resizable(调整大小)组件
查看>>
Gym 101128F Landscaping(网络流)题解
查看>>
使用Expression进行查询拼接
查看>>
父页面获得子页面的值
查看>>
elment 中 el-table 进行校验
查看>>
SQL server 动态查询(表名或字段动态),并且获取想得到的返回值结果
查看>>
Nginx配置详解
查看>>
突袭HTML5之WebGL 3D概述(上) - WebGL原生开发
查看>>
SQL 映射的 XML 文件
查看>>
转:如何成为Linux高手
查看>>
Oracle数据库修改LISTENER的监听端口
查看>>
jvm 监控工具
查看>>
java的注释和分隔符
查看>>
Vue中scoped css和css module比较
查看>>
String类的写法
查看>>