0

0

php在线压缩zip文件的方法

墨辰丷

墨辰丷

发布时间:2018-06-05 10:49:16

|

2580人浏览过

|

来源于php中文网

原创

本篇文章主要介绍php在线压缩zip文件的方法,感兴趣的朋友参考下,希望对大家有所帮助。

代码如下:





  
php ZIP压缩程序


 

 

在线压缩ZIP文件程序


使用方法:选定要压缩的文件或目录(包含子目录),即可开始压缩。压缩的结果保留原来的目录结构。
'. dirname(__FILE__) . ' 退出'; else if(isset($_GET['pwd']) ) echo '密码值:'. md5($_GET['pwd']) . ''; else echo 'Tips:在URL后参加?pwd=密码 查看生成密码.'; ?>

验证密码:
Again'); if(md5($_REQUEST['pwd']) != $password) die('输入的密码不正确!Again'); echo '选择要排除的目录(相对路径,以英文半角逗号分隔):
'; echo '
'; echo "选择要压缩的文件或目录:
"; $fdir = opendir('./'); while($file=readdir($fdir)){ if($file=='.'|| $file=='..' ) continue; echo " "; if(is_file($file)){ echo "文件: $file
"; }else{ echo "目录: $file
"; } } ?>
压缩文件保存到目录: (留空为本目录,必须有写入权限)
压缩文件名称: (.zip)

> 1); } /* 初始化文件,建立文件目录, 并返回文件的写入权限. */ function startfile($path = 'myzip.zip'){ $this->gzfilename=$path; $mypathdir=array(); do{ $mypathdir[] = $path = dirname($path); }while($path != '.'); @end($mypathdir); do{ $path = @current($mypathdir); @mkdir($path); }while(@prev($mypathdir)); if($this->fp=@fopen($this->gzfilename,"w")){ return true; } return false; } /* 添加一个文件到 zip 压缩包中. */ function addfile($data, $name){ $name = str_replace('\\', '/', $name); if(strrchr($name,'/')=='/') return $this->adddir($name); $dtime = dechex($this->unix2DosTime()); $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $c_len = strlen($zdata); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); //新添文件内容格式化: $datastr = "\x50\x4b\x03\x04"; $datastr .= "\x14\x00"; // ver needed to extract $datastr .= "\x00\x00"; // gen purpose bit flag $datastr .= "\x08\x00"; // compression method $datastr .= $hexdtime; // last mod time and date $datastr .= pack('V', $crc); // crc32 $datastr .= pack('V', $c_len); // compressed filesize $datastr .= pack('V', $unc_len); // uncompressed filesize $datastr .= pack('v', strlen($name)); // length of filename $datastr .= pack('v', 0); // extra field length $datastr .= $name; $datastr .= $zdata; $datastr .= pack('V', $crc); // crc32 $datastr .= pack('V', $c_len); // compressed filesize $datastr .= pack('V', $unc_len); // uncompressed filesize fwrite($this->fp,$datastr); //写入新的文件内容 $my_datastr_len = strlen($datastr); unset($datastr); //新添文件目录信息 $dirstr = "\x50\x4b\x01\x02"; $dirstr .= "\x00\x00"; // version made by $dirstr .= "\x14\x00"; // version needed to extract $dirstr .= "\x00\x00"; // gen purpose bit flag $dirstr .= "\x08\x00"; // compression method $dirstr .= $hexdtime; // last mod time & date $dirstr .= pack('V', $crc); // crc32 $dirstr .= pack('V', $c_len); // compressed filesize $dirstr .= pack('V', $unc_len); // uncompressed filesize $dirstr .= pack('v', strlen($name) ); // length of filename $dirstr .= pack('v', 0 ); // extra field length $dirstr .= pack('v', 0 ); // file comment length $dirstr .= pack('v', 0 ); // disk number start $dirstr .= pack('v', 0 ); // internal file attributes $dirstr .= pack('V', 32 ); // external file attributes - 'archive' bit set $dirstr .= pack('V',$this->datastr_len ); // relative offset of local header $dirstr .= $name; $this->dirstr .= $dirstr; //目录信息 $this -> file_count ++; $this -> dirstr_len += strlen($dirstr); $this -> datastr_len += $my_datastr_len; } function adddir($name){ $name = str_replace("\\", "/", $name); $datastr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"; $datastr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) ); $datastr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0); fwrite($this->fp,$datastr); //写入新的文件内容 $my_datastr_len = strlen($datastr); unset($datastr); $dirstr = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"; $dirstr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) ); $dirstr .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 ); $dirstr .= pack("V", 16 ).pack("V",$this->datastr_len).$name; $this->dirstr .= $dirstr; //目录信息 $this -> file_count ++; $this -> dirstr_len += strlen($dirstr); $this -> datastr_len += $my_datastr_len; } function createfile(){ //压缩包结束信息,包括文件总数,目录信息读取指针位置等信息 $endstr = "\x50\x4b\x05\x06\x00\x00\x00\x00" . pack('v', $this -> file_count) . pack('v', $this -> file_count) . pack('V', $this -> dirstr_len) . pack('V', $this -> datastr_len) . "\x00\x00"; fwrite($this->fp,$this->dirstr.$endstr); fclose($this->fp); } } if(!trim($_REQUEST['zipname'])) $_REQUEST['zipname'] = 'backup_'.substr(md5(__FILE__),0,8). '.zip'; else $_REQUEST['zipname'] = trim($_REQUEST['zipname']); if(!strrchr(strtolower($_REQUEST['zipname']),'.')=='.zip') $_REQUEST['zipname'] .= ".zip"; $_REQUEST['todir'] = str_replace('\\','/',trim($_REQUEST['todir'])); if(!strrchr(strtolower($_REQUEST['todir']),'/')=='/') $_REQUEST['todir'] .= "/"; if($_REQUEST['todir']=="/") $_REQUEST['todir'] = "./"; function listfiles($dir="."){ global $faisunZIP; $sub_file_num = 0; if(is_file($dir)){ if(realpath($faisunZIP->gzfilename)!=realpath($dir)){ $faisunZIP -> addfile(implode('',file($dir)),$dir); return 1; } return 0; } $handle=opendir($dir); //添加排除 $to_exlude = !empty($_POST['toexlude']) ? $_POST['toexlude'] :''; $exlude = empty($to_exlude) ? array() : explode(',',$to_exlude); while ($file = readdir($handle)) { if($file=="."||$file==".." || $file == 'wp-content' )continue; if(is_dir("$dir/$file") && !in_array("$dir/$file",$exlude) ) { $sub_file_num += listfiles("$dir/$file"); } else { if(realpath($faisunZIP ->gzfilename)!=realpath("$dir/$file")){ $faisunZIP -> addfile(implode('',file("$dir/$file")),"$dir/$file"); $sub_file_num ++; } } } closedir($handle); if(!$sub_file_num) $faisunZIP -> addfile("","$dir/"); return $sub_file_num; } function num_bitunit($num){ $bitunit=array(' B',' KB',' MB',' GB'); for($key=0;$key=pow(2,10*$key)-1){ //1023B 会显示为 1KB $num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100)." $bitunit[$key]"; } } return $num_bitunit_str; } if(is_array($_REQUEST['dfile'])){ $faisunZIP = new PHPzip; if($faisunZIP -> startfile($_REQUEST['todir'].$_REQUEST['zipname'])){ echo "正在添加压缩文件...

"; $filenum = 0; foreach($_REQUEST['dfile'] as $file){ if(is_file($file)){ echo "文件: $file
"; }else{ echo "目录: $file
"; } $filenum += listfiles($file); } $faisunZIP -> createfile(); echo "
压缩完成,共添加 $filenum 个文件.
". $_REQUEST['todir'].$_REQUEST['zipname']." (".num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")).")"; }else{ echo $_REQUEST['todir'].$_REQUEST['zipname'].'不能写入,请检查路径或权限是否正确.
'; } }else{ echo "没有选择的文件或目录.
"; } endif; ?>

TOP

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

立即学习PHP免费学习笔记(深入)”;

ectouch多通道支付插件
ectouch多通道支付插件

ectouch多通道支付插件可以为ectouch网站提供相应的在线支付功能。安装步骤:一、备份原ectouch网站源文件;二、下载以上“ectouch支付插件”附件;三、解压缩后上传“payment”目录至“ectouch”目录下的“plugins”目录中,覆盖原文件。四、安装完成

下载

php使用ffmpeg实现向视频中添加文字字幕的方法

php 数组随机取值的方法及简单实例

php parse_str() 函数的定义与用法实例详解

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

20

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

65

2025.12.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2025.12.29

python中def的用法大全
python中def的用法大全

def关键字用于在Python中定义函数。其基本语法包括函数名、参数列表、文档字符串和返回值。使用def可以定义无参数、单参数、多参数、默认参数和可变参数的函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

python改成中文版教程大全
python改成中文版教程大全

Python界面可通过以下方法改为中文版:修改系统语言环境:更改系统语言为“中文(简体)”。使用 IDE 修改:在 PyCharm 等 IDE 中更改语言设置为“中文”。使用 IDLE 修改:在 IDLE 中修改语言为“Chinese”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

C++的Top K问题怎么解决
C++的Top K问题怎么解决

TopK问题可通过优先队列、partial_sort和nth_element解决:优先队列维护大小为K的堆,适合流式数据;partial_sort对前K个元素排序,适用于需有序结果且K较小的场景;nth_element基于快速选择,平均时间复杂度O(n),效率最高但不保证前K内部有序。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

12

2025.12.29

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

134

2025.12.29

抖音网页版入口在哪(最新版)
抖音网页版入口在哪(最新版)

抖音网页版可通过官网https://www.douyin.com进入,打开浏览器输入网址后,可选择扫码或账号登录,登录后同步移动端数据,未登录仅可浏览部分推荐内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

63

2025.12.29

快手直播回放在哪看教程
快手直播回放在哪看教程

快手直播回放需主播开启功能才可观看,主要通过三种路径查看:一是从“我”主页进入“关注”标签再进主播主页的“直播”分类;二是通过“历史记录”中的“直播”标签页找回;三是进入“个人信息查阅与下载”里的“直播回放”选项。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

18

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php全栈开发经验分享直播课
php全栈开发经验分享直播课

共28课时 | 10.3万人学习

麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 4.9万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号