本文转自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压缩类,在线压缩文件相关推荐

  1. pdf压缩的网站?pdf文件在线压缩?在线压缩pdf文件大小?pdf文档压缩,在线压缩pdf文件大小,压缩pdf大小的方法?

    pdf在线压缩大小?在工作中需要处理大量PDF文件,我们通常要对PDF文件进行压缩处理.那么问题来了,PDF文件该怎么压缩呢?可能很多人都不知道具体的操作方法,今天要分享给大家的正是PDF压缩的方法, ...

  2. PNG格式如何在线压缩的简单方法

    PNG是图片的一种文件格式,PNG的在线压缩大家知道吗?在线压缩和普通的压缩是不一样的.应该有很多热都不会在线压缩,在线压缩PNG文件和在线压缩JPG文件是一样的,接下来就告诉大家怎么将PNG格式在线 ...

  3. 免费在线压缩图片的网站

    1. TinyPNG - 这是一个非常受欢迎的在线图片压缩网站,可以压缩 PNG 和 JPG 图片,保证无损压缩. 网址:TinyPNG – Compress WebP, PNG and JPEG i ...

  4. 怎样免费在线压缩MKV格式视频

     MKV是一种开放标准的自由的容器和文件格式,是一种多媒体封装格式,能够在一个文件中容纳无限数量的视频.音频.图片或字幕轨道.所以其不是一种压缩格式,而是MKV定义的一种多媒体容器文件.其目标是作为一 ...

  5. img图片(高效压缩)免费提供 · 在线压缩 - 工具篇

    在线压缩工具: 工具地址:压缩工具 注意事项: 100Kb ~ 200Kb压缩比:png > jpg <== 注意 拖拽式压缩.批量压缩: 小文件和大文件压缩比实际有不同的差异性(如果差别 ...

  6. 文件 在线压缩 技术

    客户有时会有这样的需求:把服务器上的某个文件和文件夹下载到本地,我们的解决方法是使用在线压缩技术.就是把文件先在服务器上压缩,创建一个.ZIP,然后下载到本地. 网上提供了原代码,但是有些不足之处.第 ...

  7. 怎么在线压缩PDF文件?常见途径说明

    在现代社会,PDF文件已成为我们日常生活和工作中不可或缺的一部分.然而,随着PDF文件越来越多,我们也面临着一个问题:文件大小过大,难以共享和传输.这时,PDF压缩器就成为了我们的救星. 与传统的文件 ...

  8. 迅捷在线压缩批量压缩PDF文件的方法是什么

    PDF文件现在越来越多的用于人们的工作与生活,工作和生活中都会有一些需要保密的文件.PDF文件现在之所以这么大众化的使用就是源于它的安全保密性,但是也是安全保密性导致PDF文件不易压缩,那么有什么方法 ...

  9. 在线压缩pdf文件任意大小,在线压缩pdf文件大小

    pdf格式如何压缩大小?PDF文件是我们办公中比较常见的一种文件格式,如果一份pdf文件比较大有时候传输时就会提示超出了大小限制,今天分享一个压缩pdf的简单的方法: 搜索一下:~~~~~~轻云pdf ...

最新文章

  1. json格式值班表解析
  2. js 浅拷贝直接赋值_js的浅拷贝和深拷贝的简单理解和使用方法
  3. java中声明内部类变量,java – 从内部类中访问变量(dialogView),需要声明final
  4. 省略号和可变参数模板
  5. python是什么时候发布的_python发布日期
  6. ffmpeg内存模型及AVPacket和AVFrame API基本使用
  7. java http 接口制定_java調用http接口
  8. linux压缩与解压
  9. C++ 名字空间详解
  10. Python进阶:如何将字符串常量转化为变量? 1
  11. svm (opencv)几个主要函数
  12. LinuxCentOS安装破解版Navicat
  13. Cax 渲染的精致响应式饼图
  14. 大数据新闻推送你怎么看_如何看待大数据精准推送,使人的视界越来越窄?
  15. 关于Gephi的安装的一些问题
  16. 【MQTT基础篇(一)】MQTT介绍
  17. cs224n学习笔记
  18. 数据结构基础--搜索树
  19. JavaB试题 基础练习 Fibonacci数列
  20. Markdown中空格和换行

热门文章

  1. spring组键扫描
  2. C# WinForm窗口最小化到系统托盘
  3. 如何动态创建asp.net 用户控件
  4. Eclipse导入Solr源码Version5.5.3
  5. C语言按位运算符 按位逻辑运算 移位运算 及其用法
  6. 表单提交中文乱码_Java学习路线分享如何处理中文参数
  7. cass绘制围墙lisp_CASS中用LISP完成高程值的可视化处理
  8. rocketmq常用命令
  9. org.springframework.web.client.ResourceAccessException: I/O error on POST request for ************
  10. 全面改革:解读 Vue 3.0 的变化