php上传zip文件在线解压文件在指定目录下,CI框架版本
2013-08-05 11:38
716 查看
我从网上找的文件php在线解压zip压缩文件
文件为jy.php可以直接执行,但是怎样将其加到CI框架中呢??jy.php文件
<?php class m_zip extends CI_Model { var $total_files = 0; var $total_folders = 0; function Extract($zn, $to, $index = Array ( -1 )) { $ok = 0; $zip = @ fopen($zn, 'rb'); if (!$zip) return (-1); $cdir = $this->ReadCentralDir($zip, $zn); $pos_entry = $cdir['offset']; if (!is_array($index)) { $index = array ( $index ); } for ($i = 0; $index[$i]; $i++) { if (intval($index[$i]) != $index[$i] || $index[$i] > $cdir['entries']) return (-1); } for ($i = 0; $i < $cdir['entries']; $i++) { @ fseek($zip, $pos_entry); $header = $this->ReadCentralFileHeaders($zip); $header['index'] = $i; $pos_entry = ftell($zip); @ rewind($zip); fseek($zip, $header['offset']); if (in_array("-1", $index) || in_array($i, $index)) $stat[$header['filename']] = $this->ExtractFile($header, $to, $zip); } fclose($zip); return $stat; } function ReadFileHeader($zip) { $binary_data = fread($zip, 30); $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data); $header['filename'] = fread($zip, $data['filename_len']); if ($data['extra_len'] != 0) { $header['extra'] = fread($zip, $data['extra_len']); } else { $header['extra'] = ''; } $header['compression'] = $data['compression']; $header['size'] = $data['size']; $header['compressed_size'] = $data['compressed_size']; $header['crc'] = $data['crc']; $header['flag'] = $data['flag']; $header['mdate'] = $data['mdate']; $header['mtime'] = $data['mtime']; if ($header['mdate'] && $header['mtime']) { $hour = ($header['mtime'] & 0xF800) >> 11; $minute = ($header['mtime'] & 0x07E0) >> 5; $seconde = ($header['mtime'] & 0x001F) * 2; $year = (($header['mdate'] & 0xFE00) >> 9) + 1980; $month = ($header['mdate'] & 0x01E0) >> 5; $day = $header['mdate'] & 0x001F; $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); } else { $header['mtime'] = time(); } $header['stored_filename'] = $header['filename']; $header['status'] = "ok"; return $header; } function ReadCentralFileHeaders($zip) { $binary_data = fread($zip, 46); $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); if ($header['filename_len'] != 0) $header['filename'] = fread($zip, $header['filename_len']); else $header['filename'] = ''; if ($header['extra_len'] != 0) $header['extra'] = fread($zip, $header['extra_len']); else $header['extra'] = ''; if ($header['comment_len'] != 0) $header['comment'] = fread($zip, $header['comment_len']); else $header['comment'] = ''; if ($header['mdate'] && $header['mtime']) { $hour = ($header['mtime'] & 0xF800) >> 11; $minute = ($header['mtime'] & 0x07E0) >> 5; $seconde = ($header['mtime'] & 0x001F) * 2; $year = (($header['mdate'] & 0xFE00) >> 9) + 1980; $month = ($header['mdate'] & 0x01E0) >> 5; $day = $header['mdate'] & 0x001F; $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); } else { $header['mtime'] = time(); } $header['stored_filename'] = $header['filename']; $header['status'] = 'ok'; if (substr($header['filename'], -1) == '/') $header['external'] = 0x41FF0010; return $header; } function ReadCentralDir($zip, $zip_name) { $size = filesize($zip_name); if ($size < 277) $maximum_size = $size; else $maximum_size = 277; @ fseek($zip, $size - $maximum_size); $pos = ftell($zip); $bytes = 0x00000000; while ($pos < $size) { $byte = @ fread($zip, 1); $bytes = ($bytes << 8) | ord($byte); if ($bytes == 0x504b0506 or $bytes == 0x2e706870504b0506) { $pos++; break; } $pos++; } $fdata = fread($zip, 18); $data = @ unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $fdata); if ($data['comment_size'] != 0) $centd['comment'] = fread($zip, $data['comment_size']); else $centd['comment'] = ''; $centd['entries'] = $data['entries']; $centd['disk_entries'] = $data['disk_entries']; $centd['offset'] = $data['offset']; $centd['disk_start'] = $data['disk_start']; $centd['size'] = $data['size']; $centd['disk'] = $data['disk']; return $centd; } function ExtractFile($header, $to, $zip) { $header = $this->readfileheader($zip); if (substr($to, -1) != "/") $to .= "/"; if ($to == './') $to = ''; $pth = explode("/", $to . $header['filename']); $mydir = ''; for ($i = 0; $i < count($pth) - 1; $i++) { if (!$pth[$i]) continue; $mydir .= $pth[$i] . "/"; if ((!is_dir($mydir) && @ mkdir($mydir, 0777)) || (($mydir == $to . $header['filename'] || ($mydir == $to && $this->total_folders == 0)) && is_dir($mydir))) { @ chmod($mydir, 0777); $this->total_folders++; echo "<input name='dfile[]' type='checkbox' value='$mydir' checked> <a href='$mydir' target='_blank'>目录: $mydir</a><br>"; } } if (strrchr($header['filename'], '/') == '/') return; 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'); } } $this->total_files++; echo "<input name='dfile[]' type='checkbox' value='$to$header[filename]' checked> <a href='$to$header[filename]' target='_blank'>文件: $to$header[filename]</a><br>"; return true; } // end class } ?>
View Code
相关文章推荐
- PHP Zip解压 文件在线解压缩的函数代码
- PHP上传文件到指定目录(Zend Studio 12.5)
- 使用lua代码创建文件夹,解压zip文件到指定目录(亲测可用)
- Flash AIR)AIR操作zip解压文件到指定目录下
- 解压assets中的zip压缩文件到指定目录
- PHP解压ZIP文件到指定文件夹的方法
- AIR操作zip解压文件到指定目录下
- PHP Zip解压 文件在线解压缩的函数代码
- PHP解压ZIP文件到指定文件夹的方法
- php 解压zip压缩包内容到指定目录
- php 解压zip压缩包内容到指定目录的实例
- symbian s60 将一个带有目录的zip文件解压到指定目录
- PHP 解压 ZIP 文件到指定文件夹
- php上传文件后无法移动到指定目录的解决
- Linux解压指定目录下zip和rar文件
- jQuery的$.ajax()与php后台交互,进行文件上传并保存在指定目录
- PHP 解压 ZIP 文件到指定文件夹
- windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)
- CI框架PHPExcel上传文件
- PHP删除指定目录中的所有目录及文件的方法