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

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

jy.php文件

  1. <?php
  2. header("content-Type: text/html; charset=utf-8");
  3. //验证密码
  4. $password = "123456";
  5. ?>
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  9. <title>在线解压ZIP文件程序 V1.0</title>
  10. <style type="text/css">
  11. <!--
  12. body,td{
  13. font-size: 14px;
  14. color: #000000;
  15. }
  16. a {
  17. color: #000066;
  18. text-decoration: none;
  19. }
  20. a:hover {
  21. color: #FF6600;
  22. text-decoration: underline;
  23. }
  24. -->
  25. </style>
  26. </head>
  27.  
  28. <body>
  29. <form name="myform" method="post" action="<?=$_SERVER[PHP_SELF];?>" enctype="multipart/form-data" onSubmit="return check_uploadObject(this);">
  30. <?
  31. if(!$_REQUEST["myaction"]):
  32. ?>
  33.  
  34. <script language="javascript">
  35. function check_uploadObject(form){
  36. if(form.password.value==''){
  37. alert('请输入密码.');
  38. return false;
  39. }
  40. return true;
  41. }
  42. </script>
  43.  
  44. <table width="100%" border="0" cellspacing="0" cellpadding="4">
  45. <tr>
  46. <td height="40" colspan="2" style="color:#FF9900"><p><font color="#FF0000">在线解压ZIP文件程序 V1.0</font></p>
  47. <p>使用方法:把zip文件通过FTP上传到本文件相同的目录下,选择zip文件;或直接点击“浏览...”上传zip文件。</p>
  48. <p>&nbsp;</p>
  49. </td>
  50. </tr>
  51. <tr>
  52. <td width="11%">选择ZIP文件: </td>
  53. <td width="89%"><select name="zipfile">
  54. <option value="" selected>- 请选择 -</option>
  55. <?
  56. $fdir = opendir('./');
  57. while($file=readdir($fdir)){
  58. if(!is_file($file)) continue;
  59. if(preg_match('/\.zip$/mis',$file)){
  60. echo "<option value='$file'>$file</option>\r\n";
  61. }
  62. }
  63. ?>
  64. </select></td>
  65. </tr>
  66. <tr>
  67. <td width="11%" nowrap>或上传文件: </td>
  68. <td width="89%"><input name="upfile" type="file" id="upfile" size="20"></td>
  69. </tr>
  70. <tr>
  71. <td>解压到目录: </td>
  72. <td><input name="todir" type="text" id="todir" value="" size="15">
  73. (留空为本目录,必须有写入权限)</td>
  74. </tr>
  75. <tr>
  76. <td>验证密码: </td>
  77. <td><input name="password" type="password" id="password" size="15">
  78. (源文件中设定的密码)</td>
  79. </tr>
  80. <tr>
  81. <td><input name="myaction" type="hidden" id="myaction" value="dounzip"></td>
  82. <td><input type="submit" name="Submit" value=" 解 压 "></td>
  83. </tr>
  84. </table>
  85.  
  86. <?
  87.  
  88. elseif($_REQUEST["myaction"]=="dounzip"):
  89.  
  90. class zip
  91. {
  92.  
  93. var $total_files = 0;
  94. var $total_folders = 0;
  95.  
  96. function Extract ( $zn, $to, $index = Array(-1) )
  97. {
  98. $ok = 0; $zip = @fopen($zn,'rb');
  99. if(!$zip) return(-1);
  100. $cdir = $this->ReadCentralDir($zip,$zn);
  101. $pos_entry = $cdir['offset'];
  102.  
  103. if(!is_array($index)){ $index = array($index); }
  104. for($i=0; $index[$i];$i++){
  105. if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
  106. return(-1);
  107. }
  108. for ($i=0; $i<$cdir['entries']; $i++)
  109. {
  110. @fseek($zip, $pos_entry);
  111. $header = $this->ReadCentralFileHeaders($zip);
  112. $header['index'] = $i; $pos_entry = ftell($zip);
  113. @rewind($zip); fseek($zip, $header['offset']);
  114. if(in_array("-1",$index)||in_array($i,$index))
  115. $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);
  116. }
  117. fclose($zip);
  118. return $stat;
  119. }
  120.  
  121. function ReadFileHeader($zip)
  122. {
  123. $binary_data = fread($zip, 30);
  124. $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
  125.  
  126. $header['filename'] = fread($zip, $data['filename_len']);
  127. if ($data['extra_len'] != 0) {
  128. $header['extra'] = fread($zip, $data['extra_len']);
  129. } else { $header['extra'] = ''; }
  130.  
  131. $header['compression'] = $data['compression'];$header['size'] = $data['size'];
  132. $header['compressed_size'] = $data['compressed_size'];
  133. $header['crc'] = $data['crc']; $header['flag'] = $data['flag'];
  134. $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];
  135.  
  136. if ($header['mdate'] && $header['mtime']){
  137. $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;
  138. $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;
  139. $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;
  140. $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
  141. }else{$header['mtime'] = time();}
  142.  
  143. $header['stored_filename'] = $header['filename'];
  144. $header['status'] = "ok";
  145. return $header;
  146. }
  147.  
  148. function ReadCentralFileHeaders($zip){
  149. $binary_data = fread($zip, 46);
  150. $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);
  151.  
  152. if ($header['filename_len'] != 0)
  153. $header['filename'] = fread($zip,$header['filename_len']);
  154. else $header['filename'] = '';
  155.  
  156. if ($header['extra_len'] != 0)
  157. $header['extra'] = fread($zip, $header['extra_len']);
  158. else $header['extra'] = '';
  159.  
  160. if ($header['comment_len'] != 0)
  161. $header['comment'] = fread($zip, $header['comment_len']);
  162. else $header['comment'] = '';
  163.  
  164. if ($header['mdate'] && $header['mtime'])
  165. {
  166. $hour = ($header['mtime'] & 0xF800) >> 11;
  167. $minute = ($header['mtime'] & 0x07E0) >> 5;
  168. $seconde = ($header['mtime'] & 0x001F)*2;
  169. $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
  170. $month = ($header['mdate'] & 0x01E0) >> 5;
  171. $day = $header['mdate'] & 0x001F;
  172. $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
  173. } else {
  174. $header['mtime'] = time();
  175. }
  176. $header['stored_filename'] = $header['filename'];
  177. $header['status'] = 'ok';
  178. if (substr($header['filename'], -1) == '/')
  179. $header['external'] = 0x41FF0010;
  180. return $header;
  181. }
  182.  
  183. function ReadCentralDir($zip,$zip_name){
  184. $size = filesize($zip_name);
  185.  
  186. if ($size < 277) $maximum_size = $size;
  187. else $maximum_size=277;
  188.  
  189. @fseek($zip, $size-$maximum_size);
  190. $pos = ftell($zip); $bytes = 0x00000000;
  191.  
  192. while ($pos < $size){
  193. $byte = @fread($zip, 1); $bytes=($bytes << 8) | ord($byte);
  194. if ($bytes == 0x504b0506 or $bytes == 0x2e706870504b0506){ $pos++;break;} $pos++;
  195. }
  196.  
  197. $fdata=fread($zip,18);
  198.  
  199. $data=@unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',$fdata);
  200.  
  201. if ($data['comment_size'] != 0) $centd['comment'] = fread($zip, $data['comment_size']);
  202. else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
  203. $centd['disk_entries'] = $data['disk_entries'];
  204. $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
  205. $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];
  206. return $centd;
  207. }
  208.  
  209. function ExtractFile($header,$to,$zip){
  210. $header = $this->readfileheader($zip);
  211.  
  212. if(substr($to,-1)!="/") $to.="/";
  213. if($to=='./') $to = '';
  214. $pth = explode("/",$to.$header['filename']);
  215. $mydir = '';
  216. for($i=0;$i<count($pth)-1;$i++){
  217. if(!$pth[$i]) continue;
  218. $mydir .= $pth[$i]."/";
  219. if((!is_dir($mydir) && @mkdir($mydir,0777)) || (($mydir==$to.$header['filename'] || ($mydir==$to && $this->total_folders==0)) && is_dir($mydir)) ){
  220. @chmod($mydir,0777);
  221. $this->total_folders ++;
  222. echo "<input name='dfile[]' type='checkbox' value='$mydir' checked> <a href='$mydir' target='_blank'>目录: $mydir</a><br>";
  223. }
  224. }
  225.  
  226. if(strrchr($header['filename'],'/')=='/') return;
  227.  
  228. if (!($header['external']==0x41FF0010)&&!($header['external']==16)){
  229. if ($header['compression']==0){
  230. $fp = @fopen($to.$header['filename'], 'wb');
  231. if(!$fp) return(-1);
  232. $size = $header['compressed_size'];
  233.  
  234. while ($size != 0){
  235. $read_size = ($size < 2048 ? $size : 2048);
  236. $buffer = fread($zip, $read_size);
  237. $binary_data = pack('a'.$read_size, $buffer);
  238. @fwrite($fp, $binary_data, $read_size);
  239. $size -= $read_size;
  240. }
  241. fclose($fp);
  242. touch($to.$header['filename'], $header['mtime']);
  243. }else{
  244. $fp = @fopen($to.$header['filename'].'.gz','wb');
  245. if(!$fp) return(-1);
  246. $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
  247. Chr(0x00), time(), Chr(0x00), Chr(3));
  248.  
  249. fwrite($fp, $binary_data, 10);
  250. $size = $header['compressed_size'];
  251.  
  252. while ($size != 0){
  253. $read_size = ($size < 1024 ? $size : 1024);
  254. $buffer = fread($zip, $read_size);
  255. $binary_data = pack('a'.$read_size, $buffer);
  256. @fwrite($fp, $binary_data, $read_size);
  257. $size -= $read_size;
  258. }
  259.  
  260. $binary_data = pack('VV', $header['crc'], $header['size']);
  261. fwrite($fp, $binary_data,8); fclose($fp);
  262.  
  263. $gzp = @gzopen($to.$header['filename'].'.gz','rb') or die("Cette archive est compress閑");
  264. if(!$gzp) return(-2);
  265. $fp = @fopen($to.$header['filename'],'wb');
  266. if(!$fp) return(-1);
  267. $size = $header['size'];
  268.  
  269. while ($size != 0){
  270. $read_size = ($size < 2048 ? $size : 2048);
  271. $buffer = gzread($gzp, $read_size);
  272. $binary_data = pack('a'.$read_size, $buffer);
  273. @fwrite($fp, $binary_data, $read_size);
  274. $size -= $read_size;
  275. }
  276. fclose($fp); gzclose($gzp);
  277.  
  278. touch($to.$header['filename'], $header['mtime']);
  279. @unlink($to.$header['filename'].'.gz');
  280.  
  281. }
  282. }
  283.  
  284. $this->total_files ++;
  285. echo "<input name='dfile[]' type='checkbox' value='$to$header[filename]' checked> <a href='$to$header[filename]' target='_blank'>文件: $to$header[filename]</a><br>";
  286.  
  287. return true;
  288. }
  289.  
  290. // end class
  291. }
  292.  
  293. set_time_limit(0);
  294.  
  295. if ($_POST['password'] != $password) die("输入的密码不正确,请重新输入。");
  296. if(!$_POST["todir"]) $_POST["todir"] = ".";
  297. $z = new Zip;
  298. $have_zip_file = 0;
  299. function start_unzip($tmp_name,$new_name,$checked){
  300. global $_POST,$z,$have_zip_file;
  301. $upfile = array("tmp_name"=>$tmp_name,"name"=>$new_name);
  302. if(is_file($upfile[tmp_name])){
  303. $have_zip_file = 1;
  304. echo "<br>正在解压: <input name='dfile[]' type='checkbox' value='$upfile[name]' ".($checked?"checked":"")."> $upfile[name]<br><br>";
  305. if(preg_match('/\.zip$/mis',$upfile[name])){
  306. $result=$z->Extract($upfile[tmp_name],$_POST["todir"]);
  307. if($result==-1){
  308. echo "<br>文件 $upfile[name] 错误.<br>";
  309. }
  310. echo "<br>完成,共建立 $z->total_folders 个目录,$z->total_files 个文件.<br><br><br>";
  311. }else{
  312. echo "<br>$upfile[name] 不是 zip 文件.<br><br>";
  313. }
  314. if(realpath($upfile[name])!=realpath($upfile[tmp_name])){
  315. @unlink($upfile[name]);
  316. rename($upfile[tmp_name],$upfile[name]);
  317. }
  318. }
  319. }
  320. clearstatcache();
  321.  
  322. start_unzip($_POST["zipfile"],$_POST["zipfile"],0);
  323. start_unzip($_FILES["upfile"][tmp_name],$_FILES["upfile"][name],1);
  324.  
  325. if(!$have_zip_file){
  326. echo "<br>请选择或上传文件.<br>";
  327. }
  328. ?>
  329. <input name="password" type="hidden" id="password" value="<?=$_POST['password'];?>">
  330. <input name="myaction" type="hidden" id="myaction" value="dodelete">
  331. <input name="按钮" type="button" value="返回" onClick="window.location='<?=$_SERVER[PHP_SELF];?>';">
  332.  
  333. <input type='button' value='反选' onclick='selrev();'> <input type='submit' onclick='return confirm("删除选定文件?");' value='删除选定'>
  334.  
  335. <script language='javascript'>
  336. function selrev() {
  337. with(document.myform) {
  338. for(i=0;i<elements.length;i++) {
  339. thiselm = elements[i];
  340. if(thiselm.name.match(/dfile\[]/)) thiselm.checked = !thiselm.checked;
  341. }
  342. }
  343. }
  344. alert('完成.');
  345. </script>
  346. <?
  347.  
  348. elseif($_REQUEST["myaction"]=="dodelete"):
  349. set_time_limit(0);
  350. if ($_POST['password'] != $password) die("输入的密码不正确,请重新输入。");
  351.  
  352. $dfile = $_POST["dfile"];
  353. echo "正在删除文件...<br><br>";
  354. if(is_array($dfile)){
  355. for($i=count($dfile)-1;$i>=0;$i--){
  356. if(is_file($dfile[$i])){
  357. if(@unlink($dfile[$i])){
  358. echo "已删除文件: $dfile[$i]<br>";
  359. }else{
  360. echo "删除文件失败: $dfile[$i]<br>";
  361. }
  362. }else{
  363. if(@rmdir($dfile[$i])){
  364. echo "已删除目录: $dfile[$i]<br>";
  365. }else{
  366. echo "删除目录失败: $dfile[$i]<br>";
  367. }
  368. }
  369.  
  370. }
  371. }
  372. echo "<br>完成.<br><br><input type='button' value='返回' onclick=\"window.location='$_SERVER[PHP_SELF]';\"><br><br>
  373. <script language='javascript'>('完成.');</script>";
  374.  
  375. endif;
  376.  
  377. ?>
  378. </form>
  379. </html>

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

views/informaction_zip.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3.  
  4. <html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">
  5. <!--
  6. * Created on 2013-8-5
  7. *
  8. * To change the template for this generated file go to
  9. * Window - Preferences - PHPeclipse - PHP - Code Templates
  10. -->
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  13. <title> </title>
  14. <style type="text/css">
  15. <!--
  16. body,td{
  17. font-size: 14px;
  18. color: #000000;
  19. }
  20. a {
  21. color: #000066;
  22. text-decoration: none;
  23. }
  24. a:hover {
  25. color: #FF6600;
  26. text-decoration: underline;
  27. }
  28. -->
  29. </style>
  30. </head>
  31.  
  32. <body>
  33. <form name="myform" method="post" action="<?= base_url() ?>index.php/admin/zip/zipUtil" enctype="multipart/form-data" onSubmit="return check_uploadObject(this);">
  34. </script>
  35.  
  36. <table width="100%" border="0" cellspacing="0" cellpadding="4">
  37. <tr>
  38. <p>使用方法:直接点击“浏览...”上传zip文件,这里的文件只能是zip文件,zip文件和子文件以英文命名。</p>
  39. <p>&nbsp;</p>
  40. </td>
  41. </tr>
  42. <tr>
  43. <td width="11%" nowrap>上传文件: </td>
  44. <td width="89%"><input name="upfile" type="file" id="upfile" size="20"></td>
  45. </tr>
  46. <tr>
  47.  
  48. <td><input name="todir" type="text" id="todir" style="display:none" value="pdf+images" size="15"></td>
  49. </tr>
  50.  
  51. <tr>
  52. <td><input name="myaction" type="hidden" id="myaction" value="dounzip"></td>
  53. <td><input type="submit" name="Submit" value=" 解 压 "></td>
  54. </tr>
  55. </table>
  56. </form>
  57.  
  58. </body>
  59. </html>

controllers/zip.php

  1. <?php
  2.  
  3. /*
  4. * Created on 2013-7-7
  5. *
  6. * To change the template for this generated file go to
  7. * Window - Preferences - PHPeclipse - PHP - Code Templates
  8. */
  9. class Zip extends CI_Controller {
  10. //构造函数
  11. function __construct() {
  12. parent :: __construct();
  13. $this->load->helper('url');
  14. $this->load->model("m_zip");
  15. error_reporting(1);
  16. }
  17.  
  18. //显示zip文件录入信息界面
  19. public function index() {
  20. $this->load->view('admin/subject/information_zip');
  21. }
  22. //处理zip信息界面
  23. public function zipUtil() {
  24. if (!$_POST["todir"])
  25. $_POST["todir"] = ".";
  26. clearstatcache();
  27. // echo $_FILES["upfile"]["tmp_name"];
  28. $this->start_unzip($_FILES["upfile"]["tmp_name"], $_FILES["upfile"]["name"], 1);
  29. }
  30. function start_unzip($tmp_name, $new_name, $checked) {
  31. $have_zip_file = 0;
  32. $upfile = array (
  33. "tmp_name" => $tmp_name,
  34. "name" => $new_name
  35. );
  36. if (is_file($upfile["tmp_name"])) {
  37. $have_zip_file = 1;
  38. $z = $this->m_zip;
  39. echo "<br>正在解压: <input name='dfile[]' type='checkbox' value='$upfile[name]' " . ($checked ? "checked" : "") . "> $upfile[name]<br><br>";
  40. if (preg_match('/\.zip$/mis', $upfile["name"])) {
  41. $result = $z->Extract($upfile["tmp_name"], $_POST["todir"]);
  42. if ($result == -1) {
  43. echo "<br>文件 $upfile[name] 错误.<br>";
  44. }
  45. echo "<br>完成,$z->total_files 个文件.<br><br><br>";
  46.  
  47. } else {
  48. echo "<br>$upfile[name] 不是 zip 文件.<br><br>";
  49. }
  50. if (realpath($upfile["name"]) != realpath($upfile["tmp_name"])) {
  51. @ unlink($upfile["name"]);
  52. rename($upfile["tmp_name"], $upfile["name"]);
  53. unlink($upfile["name"]);
  54. }
  55. }
  56.  
  57. }
  58. }
  59. ?>

models/m_zip.php

  1. <?php
  2. class m_zip extends CI_Model {
  3. var $total_files = 0;
  4. var $total_folders = 0;
  5.  
  6. function Extract($zn, $to, $index = Array (
  7. -1
  8. )) {
  9. $ok = 0;
  10. $zip = @ fopen($zn, 'rb');
  11. if (!$zip)
  12. return (-1);
  13. $cdir = $this->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. else
  118. $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. else
  141. $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 "<input name='dfile[]' type='checkbox' value='$mydir' checked> <a href='$mydir' target='_blank'>目录: $mydir</a><br>";
  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 "<input name='dfile[]' type='checkbox' value='$to$header[filename]' checked> <a href='$to$header[filename]' target='_blank'>文件: $to$header[filename]</a><br>";
  237.  
  238. return true;
  239. }
  240.  
  241. // end class
  242. }
  243. ?>

php上传zip文件在线解压文件在指定目录下,CI框架版本的更多相关文章

  1. SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html

    SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...

  2. .Net类库 压缩文件 与 Ionic.Zip 批量压缩不同目录文件与解压 文件

    using System; using System.IO; using System.IO.Compression; using System.Linq; using System.Text; us ...

  3. Unity3D研究院之LZMA压缩文件与解压文件

    原地址:http://www.xuanyusong.com/archives/3095 前两天有朋友告诉我Unity的Assetbundle是LZMA压缩的,刚好今天有时间那么就研究研究LZMA.它是 ...

  4. centos 解压压缩包到指定目录

    解压.tar.gz文件: tar -zxvf web.tar.gz tar不支付解压文件到指定的目录! 解压.war .zip文件到指定目录: unzip web.war -d webapps/ROO ...

  5. Python--通过索引excel表将文件进行文件夹分类的脚本+读取指定目录下所有文件名的脚本

    1.通过索引excel表将文件进行文件夹分类的脚本,此脚本由于将ip和id对应并生成对应id的文件夹将文件进行分类,也可以任意规定表格内容,通过vul_sc_ip.txt和xlsx文件进行索引. # ...

  6. java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决

    情景描述: 1.将本地数据备份成zip文件: 2.将备份的zip文件通过sftp上传到文件服务器: 3.将文件服务器上的zip文件下载到运行服务器: 4.将下载的zip文件解压到本地(文件大小超过50 ...

  7. zip压缩与解压文件夹或文件

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...

  8. php下载文件,解压文件,读取并写入新文件

    以下代码都是本人在工作中遇到的问题,并完成的具体代码和注释,不多说,直接上代码: <?php      //组织链接      $dataurl = "http://118.194.2 ...

  9. Linux zip解压/压缩并指定目录

    方法如下: 压缩并指定目录举例:zip -r /home/kms/kms.zip /home/kms/server/kms 解压并指定目录 举例:unzip /home/kms/kms.zip -d ...

随机推荐

  1. java 反射的实例

    JAVA反射机制是在运行状态中,对于任意一个类,都能够得到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 ...

  2. 锤子便签的 monkeyrunner 测试脚本(转)

    https://testerhome.com/topics/878 MonkeyRunner可能大家已经听过无数次了,大家在网上也看过了各种关于的它的资料了,我这里就不再过多的啰嗦它的用途了,它可以对 ...

  3. 学习笔记——策略模式Strategy

    策略模式,与模板模式一样,都是为了将接口和算法实现解耦,但策略模式更主要是整体算法的替换,而模板模式主要是流程一致,部分算法的替换. 个人理解为,一般算法替换,使用策略模式,当算法流程一致,可以提取为 ...

  4. Windows编译安装mod_wsgi,配合使用Django+Apahce

    编译环境: 均是32位版本 Microsoft Visual Studio 10.0 Microsoft SDKs v7.1 Apache2.4 Python3.4 mod_wsgi-4.5.0 要求 ...

  5. DHCP详细工作过程(转)

    DHCP客户端通过和DHCP服务器的交互通讯以获得IP地址租约.为了从DHCP服务器获得一个IP地址,在标准情况下DHCP客户端和DHCP服务器之间会进行四次通讯.DHCP协议通讯使用端口UDP 67 ...

  6. Windows API 之 CreateThread、GetExitCodeThread(未完)

    GetExitCode Retrieves the termination status of the specified thread. BOOL WINAPI GetExitCodeThread( ...

  7. 未能加载文件或程序集 Microsoft.VisualBasic.PowerPacks.Vs, Version=10.0.0.0 解决 亲测

    项目打开winform程序做的某些窗体时报错: ************* 异常文本 ************** System.Reflection.TargetInvocationExceptio ...

  8. linux常用命令 、查看日志、web排查

    linux常用命令 ps aux|grep xxx (比如 ps aux|grep tomcat ps aux|grep tomcat-portalvip ps aux|grep nginx 等) r ...

  9. 监控redis进程,如果没有自动重启

    监控redis进程,如果没有自动重启 #Time:2016-01-22#Version:1.0 #Author:chh-huang #设置环境变量source /etc/profile#source ...

  10. hibernate事务并发问题(脏读,不可重复读,幻读)

    脏读  dirty read:  读了别的事务没有提交的事务, 可能回滚, 数据可能不对. 不可重复读 non repeatable read: 同一个事务里前后读出来的数据不一样, 被另一个事务影响 ...