博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个PHP压缩类,在线压缩文件
阅读量:7212 次
发布时间:2019-06-29

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

本文转自IT摆渡网欢迎转载,请标明出处

更多php文章请阅读

  PHP压缩类:用于在线压缩文件、文档、目录等,附有使用方法,不想了解类原理的可直接按使用方法调用该类:

GetFileList($dir); } if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir); else chdir($curdir); if (count($filelist)>0) { foreach($filelist as $filename) { if (is_file($filename)) { $fd = fopen ($filename, "r"); $content = fread ($fd, filesize ($filename)); fclose ($fd); if (is_array($dir)) $filename = basename($filename); $this -> addFile($content, $filename); } } $out = $this -> file(); chdir($curdir); $fp = fopen($zipfilename, "w"); fwrite($fp, $out, strlen($out)); fclose($fp); } return 1; } else return 0;}function GetFileList($dir){ if (file_exists($dir)) { $args = func_get_args(); $pref = $args[1]; $dh = opendir($dir); while($files = readdir($dh)) { if (($files!=".")&&($files!="..")) { if (is_dir($dir.$files)) { $curdir = getcwd(); chdir($dir.$files); $file = array_merge($file, $this -> GetFileList("", "$pref$files/")); chdir($curdir); } else $file[]=$pref.$files; } } closedir($dh); } return $file;}var $datasec = array();var $ctrl_dir = array();var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00";var $old_offset = 0;function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);}function addFile($data, $name, $time = 0){ $name = str_replace('', '/', $name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = 'x' . $dtime[6] . $dtime[7] . 'x' . $dtime[4] . $dtime[5] . 'x' . $dtime[2] . $dtime[3] . 'x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $fr = "x50x4bx03x04"; $fr .= "x14x00"; $fr .= "x00x00"; $fr .= "x08x00"; $fr .= $hexdtime; $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $c_len = strlen($zdata); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $fr .= pack('v', strlen($name)); $fr .= pack('v', 0); $fr .= $name; $fr .= $zdata; $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $this -> datasec[] = $fr; $new_offset = strlen(implode('', $this->datasec)); $cdrec = "x50x4bx01x02"; $cdrec .= "x00x00"; $cdrec .= "x14x00"; $cdrec .= "x00x00"; $cdrec .= "x08x00"; $cdrec .= $hexdtime; $cdrec .= pack('V', $crc); $cdrec .= pack('V', $c_len); $cdrec .= pack('V', $unc_len); $cdrec .= pack('v', strlen($name) ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('V', 32 ); $cdrec .= pack('V', $this -> old_offset ); $this -> old_offset = $new_offset; $cdrec .= $name; $this -> ctrl_dir[] = $cdrec;}function file(){ $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "x00x00";}} //PHP压缩类结束?>

  代码帖完了,那么使用这个压缩类呢?下面告诉你三种调用方法:

Zip("", "out1.zip"); //添加当前目录和子目录下的所有文件//方法二:$files=array('1.txt','gb.txt');$files[]='5.txt';$z -> Zip($files, "out2.zip"); //添加文件列表//方法三:$z -> Zip("/usr/local/sext/", "out3.zip"); //添加指定目录?>

  到此PHP压缩类和调用方法都告诉你了,快动手测试一下吧,希望你会得到惊喜。

阅读了这篇文章的人还阅读了

你可能感兴趣的文章
TiDB DevCon 2019 报名开启:年度最高规格的 TiDB 技术大会
查看>>
React Native 初体验
查看>>
数据结构与算法 | 线性表 —— 链表
查看>>
Python3 websocket通信
查看>>
使用MarkDown画矩阵
查看>>
JavaScript函数式编程学习
查看>>
ESXi6.7安装流程和bug处理
查看>>
Alibaba Cluster Data 开放下载:270GB 数据揭秘你不知道的阿里巴巴数据中心
查看>>
巧用这19条MySQL优化,效率至少提高3倍
查看>>
【译】Swift算法俱乐部-查找最大/最小值
查看>>
跟着老司机玩转Node自定义命令行
查看>>
react-redux的Provider和connect
查看>>
杂七杂八的前端基础01——函数作用域
查看>>
new操作符具体干了啥
查看>>
iOS响应链
查看>>
『中级篇』docker容器安装wordpress(37)
查看>>
设备节点监听--走在 input 分析之前
查看>>
一行代码实现微光效果
查看>>
React Native学习之 ListView 的简单使用
查看>>
Java 8流操作
查看>>