PHP ZipArchive 压缩目录及子目录所有文件为 ZIP 压缩包文件,使用 PHP 核心内置的 ZipArchive + RecursiveIteratorIterator + RecursiveDirectoryIterator 实现 ZipArchive 压缩文件夹及下级文件夹中的全部文件为ZIP压缩包。
PHP ZipArchive 类需要 php_zip.dll 扩展支持,从 PHP 5.3 开始已经内置在 PHP 核心中,而且默认可用。
PHP 压缩文件夹函数为 ZIP 文件的代码及示例。如果文件名包含中文等当前 PHP 版本不支持的字符,请自行转码。PHP 7.1+ 支持 UTF-8 文件名和 I/O 流,不再需要转码。建议使用最高版本的 PHP 以免遇到不必要的麻烦。- <?php
- /**
- * PHP ZipArchive压缩文件夹,实现将目录及子目录中的所有文件压缩为zip文件
- * @author 吴先成 wuxiancheng.cn 高阶代码 原创发布
- * @param string $folderPath 要压缩的目录路径 绝对路径和相对路径都可以
- * @param string $zipAs 压缩包文件的文件名,可以带路径,不能为空
- * @return bool 成功时返回true,否则返回false
- */
- function zipFolder($folderPath, $zipAs){
- if(!is_scalar($folderPath) || !is_scalar($zipAs)){
- return false;
- }
- $folderPath = (string)$folderPath;
- $folderPath = str_replace('\\', '/', $folderPath);
- $zipAs = (string)$zipAs;
- if($zipAs === ''){
- return false;
- }
- try{
- $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folderPath, RecursiveDirectoryIterator::UNIX_PATHS|RecursiveDirectoryIterator::CURRENT_AS_SELF|RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD);
- $zipObject = new ZipArchive();
- $errorCode = $zipObject->open($zipAs, ZipArchive::CREATE|ZipArchive::OVERWRITE);
- if($errorCode !== true){
- return false;
- }
- foreach($files as $file){
- $subPath = $file->getSubPathname();
- if($file->isDir()){
- $subPath = rtrim($subPath, '/') . '/';
- $zipObject->addEmptyDir($subPath);
- }else{
- $zipObject->addFile($subPath);
- }
- }
- if($zipObject->close()){
- return true;
- }
- }catch(Exception $e){
- }
- return false;
- }
-
- /* 语法举例 */
- if(zipFolder(getcwd(), 'wuxiancheng.cn.backup.zip')){
- echo 'success';
- }else{
- echo 'failure';
- }
- ?>
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?新建账号
×
|