php实现zip压缩
可以使用ZipArchive类来创建ZIP压缩文件。ZipArchive是PHP内置的一个类,提供了创建、打开、读取、写入和关闭ZIP文件的功能。
示例:压缩单个文件
<?php$fileToZip = 'path/to/your/file.txt';
$zipFileName = 'compressed.zip';$zip = new ZipArchive();
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {$zip->addFile($fileToZip, basename($fileToZip)); // 第二个参数是文件在ZIP中的名称$zip->close();echo "文件已成功压缩到 $zipFileName";
} else {echo "无法创建ZIP文件";
}?>
示例:压缩多个文件
<?php$filesToZip = ['file1.txt', 'file2.txt', 'file3.txt'];
$zipFileName = 'multiple_files.zip';$zip = new ZipArchive();
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {foreach ($filesToZip as $file) {if (file_exists($file)) {$zip->addFile($file, basename($file));}}$zip->close();echo "文件已成功压缩到 $zipFileName";
} else {echo "无法创建ZIP文件";
}?>
示例:压缩文件夹
压缩文件夹需要递归地遍历文件夹中的所有文件和子文件夹。以下是一个递归函数的示例:
<?phpfunction addFolderToZip($folder, &$zipFile, $exclusiveLength) {$handle = opendir($folder);while ($f = readdir($handle)) {if ($f != '.' && $f != '..') {$filePath = "$folder/$f";// 去掉前缀的路径,以便在ZIP中保持相对路径$localPath = substr($filePath, $exclusiveLength);if (is_file($filePath)) {$zipFile->addFile($filePath, $localPath);} elseif (is_dir($filePath)) {// 递归调用以添加子文件夹$zipFile->addEmptyDir($localPath);addFolderToZip($filePath, $zipFile, $exclusiveLength);}}}closedir($handle);
}$folderToZip = 'path/to/your/folder';
$zipFileName = 'folder_compressed.zip';$zip = new ZipArchive();
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {addFolderToZip($folderToZip, $zip, strlen("$folderToZip/"));$zip->close();echo "文件夹已成功压缩到 $zipFileName";
} else {echo "无法创建ZIP文件";
}?>
我的个人PHP项目:
PHP全文检索引擎 WindSearch: https://github.com/rock365/windsearch
请帮我点个star~谢谢你!