PHP 压缩文件夹的类代码


Posted in PHP onNovember 05, 2009
<?php 
/* 
$Id: PHPZip.php 
*/ 
class PHPZip { 
var $datasec = array(); 
var $ctrl_dir = array(); 
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; 
var $old_offset = 0; 
function Zip($dir, $zipfilename) { 
if (@function_exists('gzcompress')) { 
@set_time_limit("0"); 
$this->openFile($dir,$dir); 
$out = $this -> filezip(); 
$fp = fopen($zipfilename, "w"); 
fwrite($fp, $out, strlen($out)); 
fclose($fp); 
} 
} 
function openFile($path, $zipName) { 
$temp_path = $path; 
$temp_zip_path = $zipName; 
$zipDir = $zipName; 
if ($handle = @opendir($path)) { 
while (false !== ($file = readdir($handle))) { 
if($file !='.' and $file !='..'){ 
if(ereg('\.' , $file.@basename())) { 
$fd = fopen($path.'/'.$file, "r"); 
$fileValue = @fread ($fd, 1024000); 
fclose ($fd); 
$this -> addFile($fileValue, $zipName . '/' . $file); 
} else { 
$this ->openFile($path.'/'.$file, $zipName . '/' . $file); 
} 
} 
} 
$zipName = $temp_zip_path; 
$path = $temp_path; 
closedir($handle); 
} 
} 
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; 
} 
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 = "\x50\x4b\x03\x04"; 
$fr .= "\x14\x00"; 
$fr .= "\x00\x00"; 
$fr .= "\x08\x00"; 
$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); 
$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 = "\x50\x4b\x01\x02"; 
$cdrec .= "\x00\x00"; 
$cdrec .= "\x14\x00"; 
$cdrec .= "\x00\x00"; 
$cdrec .= "\x08\x00"; 
$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 filezip() { 
$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)) . 
"\x00\x00"; 
} 
} 
?>
PHP 相关文章推荐
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
php递归遍历删除文件的方法
Apr 17 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
解决PhpStorm64不能启动的问题
Jun 20 PHP
PHP 向右侧拉菜单实现代码,测试使用中
Nov 03 #PHP
网页游戏开发入门教程三(简单程序应用)
Nov 02 #PHP
网页游戏开发入门教程二(游戏模式+系统)
Nov 02 #PHP
初学CAKEPHP 基础教程
Nov 02 #PHP
PHP+MySQL 制作简单的留言本
Nov 02 #PHP
PHP+XML 制作简单的留言本 图文教程
Nov 02 #PHP
php 调用远程url的六种方法小结
Nov 02 #PHP
You might like
php动态生成JavaScript代码
2009/03/09 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP生成plist数据的方法
2015/06/16 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
python实现从字典中删除元素的方法
2015/05/04 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python机器学习库xgboost的使用
2020/01/20 Python
通过自学python能找到工作吗
2020/06/21 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
五四青年节活动总结
2015/02/10 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技