php中文目录附件,php 压缩文件类,支持递归添加文件目录,支持空目录,支持中文路径及文件名...

php 压缩文件类,支持递归添加文件目录,支持空目录,支持中文路径及文件名<?php

//使用示例

$path = 'D:/aaa/bbb/aaa.txt';

$path = 'D:/aaa/bbb';

ZipClass::runZip($path);

/**

* php 压缩文件类,支持递归添加文件目录,支持空目录,支持中文路径及文件名

* Class ZipClass

*/

class ZipClass

{

/**

* @param $path  目录或文件绝对路径

* @param string $zipname 压缩文件的路径

*/

public static function runZip($path, $zipname = '')

{

$zipname = empty($zipname) ? $path . '.zip' : $zipname;

$path = str_replace('\\', '/', $path);

$zip = new \ZipArchive();

//if ($zip->open($zipname, \ZIPARCHIVE::CREATE)===true || $zip->open($zipname, \ZIPARCHIVE::OVERWRITE)===true) {

if (is_file($zipname)) {

//unlink($zipname);

$zip->open($zipname, \ZIPARCHIVE::OVERWRITE);

} else {

$zip->open($zipname, \ZIPARCHIVE::CREATE);

}

if (is_file($path)) {

$pathArr = explode('/', $path);

$zip->addFile($path, end($pathArr));

} else {

//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法

static::addFileToZip($path, $zip, strlen($path));

}

$zip->close(); //关闭处理的zip文件

}

/**

* @param $path 压缩文件目录路径

* @param $zip  ZipArchive的对象

* @param int $len 去除原始文件路径

*/

public static function addFileToZip($path, $zip, $len = 0)

{

//$path = str_replace('\\', '/', $path);

//打开当前文件夹由$path指定

$handler = opendir($path);

while (($filename = readdir($handler)) !== false) {

//文件夹文件名字为'.'和‘..',不要对他们进行操作

if ($filename != "." && $filename != "..") {

if (is_dir($path . "/" . $filename)) {

//添加空目录

$zip->addFromString(substr($path . "/" . $filename . '/', $len + 1), null);

//如果读取的某个对象是文件夹,则递归

static::addFileToZip($path . "/" . $filename, $zip, $len);

} else {

$file3 = $path . "/" . $filename;

$file4 = substr($file3, $len + 1);

//将文件加入zip对象

$zip->addFile($path . "/" . $filename, $file4);

}

}

}

@closedir($path);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值