一个PHP压缩类,在线压缩文件
本文转自IT摆渡网欢迎转载,请标明出处
更多php文章请阅读
php开发
PHP压缩类:用于在线压缩文件、文档、目录等,附有使用方法,不想了解类原理的可直接按使用方法调用该类:
<?php
//PHP压缩类代码开始
class PHPZip{
function Zip($dir, $zipfilename)
{if (@function_exists('gzcompress')){$curdir = getcwd();if (is_array($dir)){$filelist = $dir;}else{$filelist = $this -> 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 ifreturn (($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压缩类结束
?>
代码帖完了,那么使用这个压缩类呢?下面告诉你三种调用方法:
<?php
//不管哪种方法,都需要先新建zip类
$z = new PHPZip();//方法一:
$z -> 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压缩类和调用方法都告诉你了,快动手测试一下吧,希望你会得到惊喜。
阅读了这篇文章的人还阅读了
php+mysql分页原理案例分析
php把HTML代码转换成文本输出的方法
如何设置访问index.php/index.html的时候自动切换到顶
提供PHP问题错误修改服务
一个PHP压缩类,在线压缩文件相关推荐
- pdf压缩的网站?pdf文件在线压缩?在线压缩pdf文件大小?pdf文档压缩,在线压缩pdf文件大小,压缩pdf大小的方法?
pdf在线压缩大小?在工作中需要处理大量PDF文件,我们通常要对PDF文件进行压缩处理.那么问题来了,PDF文件该怎么压缩呢?可能很多人都不知道具体的操作方法,今天要分享给大家的正是PDF压缩的方法, ...
- PNG格式如何在线压缩的简单方法
PNG是图片的一种文件格式,PNG的在线压缩大家知道吗?在线压缩和普通的压缩是不一样的.应该有很多热都不会在线压缩,在线压缩PNG文件和在线压缩JPG文件是一样的,接下来就告诉大家怎么将PNG格式在线 ...
- 免费在线压缩图片的网站
1. TinyPNG - 这是一个非常受欢迎的在线图片压缩网站,可以压缩 PNG 和 JPG 图片,保证无损压缩. 网址:TinyPNG – Compress WebP, PNG and JPEG i ...
- 怎样免费在线压缩MKV格式视频
MKV是一种开放标准的自由的容器和文件格式,是一种多媒体封装格式,能够在一个文件中容纳无限数量的视频.音频.图片或字幕轨道.所以其不是一种压缩格式,而是MKV定义的一种多媒体容器文件.其目标是作为一 ...
- img图片(高效压缩)免费提供 · 在线压缩 - 工具篇
在线压缩工具: 工具地址:压缩工具 注意事项: 100Kb ~ 200Kb压缩比:png > jpg <== 注意 拖拽式压缩.批量压缩: 小文件和大文件压缩比实际有不同的差异性(如果差别 ...
- 文件 在线压缩 技术
客户有时会有这样的需求:把服务器上的某个文件和文件夹下载到本地,我们的解决方法是使用在线压缩技术.就是把文件先在服务器上压缩,创建一个.ZIP,然后下载到本地. 网上提供了原代码,但是有些不足之处.第 ...
- 怎么在线压缩PDF文件?常见途径说明
在现代社会,PDF文件已成为我们日常生活和工作中不可或缺的一部分.然而,随着PDF文件越来越多,我们也面临着一个问题:文件大小过大,难以共享和传输.这时,PDF压缩器就成为了我们的救星. 与传统的文件 ...
- 迅捷在线压缩批量压缩PDF文件的方法是什么
PDF文件现在越来越多的用于人们的工作与生活,工作和生活中都会有一些需要保密的文件.PDF文件现在之所以这么大众化的使用就是源于它的安全保密性,但是也是安全保密性导致PDF文件不易压缩,那么有什么方法 ...
- 在线压缩pdf文件任意大小,在线压缩pdf文件大小
pdf格式如何压缩大小?PDF文件是我们办公中比较常见的一种文件格式,如果一份pdf文件比较大有时候传输时就会提示超出了大小限制,今天分享一个压缩pdf的简单的方法: 搜索一下:~~~~~~轻云pdf ...
最新文章
- json格式值班表解析
- js 浅拷贝直接赋值_js的浅拷贝和深拷贝的简单理解和使用方法
- java中声明内部类变量,java – 从内部类中访问变量(dialogView),需要声明final
- 省略号和可变参数模板
- python是什么时候发布的_python发布日期
- ffmpeg内存模型及AVPacket和AVFrame API基本使用
- java http 接口制定_java調用http接口
- linux压缩与解压
- C++ 名字空间详解
- Python进阶:如何将字符串常量转化为变量? 1
- svm (opencv)几个主要函数
- LinuxCentOS安装破解版Navicat
- Cax 渲染的精致响应式饼图
- 大数据新闻推送你怎么看_如何看待大数据精准推送,使人的视界越来越窄?
- 关于Gephi的安装的一些问题
- 【MQTT基础篇(一)】MQTT介绍
- cs224n学习笔记
- 数据结构基础--搜索树
- JavaB试题 基础练习 Fibonacci数列
- Markdown中空格和换行
热门文章
- spring组键扫描
- C# WinForm窗口最小化到系统托盘
- 如何动态创建asp.net 用户控件
- Eclipse导入Solr源码Version5.5.3
- C语言按位运算符 按位逻辑运算 移位运算 及其用法
- 表单提交中文乱码_Java学习路线分享如何处理中文参数
- cass绘制围墙lisp_CASS中用LISP完成高程值的可视化处理
- rocketmq常用命令
- org.springframework.web.client.ResourceAccessException: I/O error on POST request for ************
- 全面改革:解读 Vue 3.0 的变化