本文目录导读:

在PHP中操作ZIP压缩包主要使用内置的 ZipArchive 类,以下是常用的操作方法:
创建ZIP压缩包
<?php
$zip = new ZipArchive();
$zipFile = 'example.zip';
// 打开或创建ZIP文件
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
// 添加文件到压缩包
$zip->addFile('file1.txt', 'new_file1.txt'); // 源文件, 压缩包内的文件名
$zip->addFile('file2.txt');
// 添加目录
$zip->addEmptyDir('images');
// 将字符串添加到压缩包
$zip->addFromString('hello.txt', 'Hello World!');
// 保存并关闭
$zip->close();
echo "压缩包创建成功";
} else {
echo "无法创建压缩包";
}
?>
解压ZIP文件
<?php
$zip = new ZipArchive();
$zipFile = 'example.zip';
if ($zip->open($zipFile) === TRUE) {
// 解压到指定目录
$zip->extractTo('./extracted_files/');
$zip->close();
echo "解压成功";
} else {
echo "无法打开压缩包";
}
?>
读取ZIP文件内容
<?php
$zip = new ZipArchive();
$zipFile = 'example.zip';
if ($zip->open($zipFile) === TRUE) {
// 获取文件数量
$fileCount = $zip->numFiles;
echo "压缩包包含 $fileCount 个文件\n";
// 遍历所有文件
for ($i = 0; $i < $fileCount; $i++) {
$stat = $zip->statIndex($i);
echo "文件 {$i}: {$stat['name']} ({$stat['size']} bytes)\n";
}
// 读取特定文件内容
$content = $zip->getFromName('hello.txt');
echo "hello.txt 内容: " . $content;
$zip->close();
}
?>
删除ZIP中的文件
<?php
$zip = new ZipArchive();
$zipFile = 'example.zip';
if ($zip->open($zipFile) === TRUE) {
// 删除指定文件
$zip->deleteName('file1.txt');
// 删除指定索引的文件
$zip->deleteIndex(0);
$zip->close();
echo "文件删除成功";
}
?>
添加目录到压缩包
<?php
function addFolderToZip($zip, $folder, $exclude = []) {
$dir = opendir($folder);
while ($file = readdir($dir)) {
if (in_array($file, $exclude) || $file == '.' || $file == '..') {
continue;
}
$filePath = $folder . '/' . $file;
if (is_file($filePath)) {
// 添加文件,保持目录结构
$zip->addFile($filePath, str_replace('./', '', $filePath));
} elseif (is_dir($filePath)) {
// 递归添加子目录
$zip->addEmptyDir(str_replace('./', '', $filePath));
addFolderToZip($zip, $filePath, $exclude);
}
}
closedir($dir);
}
$zip = new ZipArchive();
$zipFile = 'backup.zip';
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
addFolderToZip($zip, './my_folder', ['.git', 'node_modules']);
$zip->close();
echo "目录压缩成功";
}
?>
设置密码保护(ZIP加密)
<?php
$zip = new ZipArchive();
$zipFile = 'encrypted.zip';
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
// 设置密码(注意:这需要PHP 7.2+且只支持传统加密)
$zip->setPassword('mypassword');
// 添加文件并加密
$zip->addFile('sensitive.txt');
$zip->setEncryptionName('sensitive.txt', ZipArchive::EM_AES_256);
$zip->close();
echo "加密压缩包创建成功";
}
?>
压缩前检查文件是否存在
<?php
$zip = new ZipArchive();
$zipFile = 'test.zip';
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
$files = ['file1.txt', 'file2.txt', 'file3.txt'];
foreach ($files as $file) {
if (file_exists($file)) {
$zip->addFile($file);
} else {
echo "警告: $file 不存在,已跳过\n";
}
}
$zip->close();
}
?>
流式下载ZIP文件
<?php
$zip = new ZipArchive();
$zipFile = tempnam(sys_get_temp_dir(), 'zip');
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
$zip->addFile('document.pdf');
$zip->addFile('image.jpg');
$zip->close();
// 设置下载头
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="download.zip"');
header('Content-Length: ' . filesize($zipFile));
readfile($zipFile);
unlink($zipFile); // 删除临时文件
exit;
}
?>
注意事项
-
安装扩展:确保PHP已安装zip扩展
# Linux sudo apt-get install php-zip # 或 sudo yum install php-zip # 在php.ini中启用 extension=zip
-
文件大小限制:大文件压缩时注意内存和超时设置
ini_set('memory_limit', '512M'); set_time_limit(0); -
权限问题:确保PHP有权限读写ZIP文件和目标目录
这些方法覆盖了大多数常见的ZIP操作场景,可以根据具体需求选择合适的方案。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播