提问人:Maciek 提问时间:6/24/2023 更新时间:6/24/2023 访问量:79
PHP Zip 存档提取整个文件夹
PHP Zip Archive Extract Entire Folder
问:
我正在使用 PHP ZipArchive。非常简单,但我在提取整个文件夹时遇到了问题。
$zip=new \ZipArchive;
$zip->open('zipped.docx');
$zip->extractTo('unzipped/',['word/document.xml','word/media/*']);
$zip->close();
我正在尝试解压缩一个 docx 文档并提取 document.xml 以及带有与 docx 关联的图像的媒体文件夹。
我试过:,,没有成功。word/media/*
word/media/
word/media
有可能吗?
答:
2赞
Ozan Kurt
6/24/2023
#1
是的,可以使用 PHP 的 ZipArchive 类提取整个文件夹。但是,ZipArchive 类不支持通配符模式(如“word/media/*”)一次提取多个文件或目录。
要提取“word/document.xml”文件和“word/media”文件夹及其内容,您可以按照以下步骤操作:
$zip = new \ZipArchive;
$zipFile = 'zipped.docx';
$extractPath = 'unzipped/';
if ($zip->open($zipFile) === true) {
// Extract document.xml
$zip->extractTo($extractPath, 'word/document.xml');
// Extract the media folder and its contents
$mediaFolderIndex = $zip->locateName('word/media/');
if ($mediaFolderIndex !== false) {
for ($i = $mediaFolderIndex; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
if (strpos($filename, 'word/media/') === 0) {
$zip->extractTo($extractPath, $filename);
} else {
break; // Exit the loop when we reach a file outside the media folder
}
}
}
$zip->close();
} else {
echo 'Failed to open the zip file.';
}
在此代码中,我们首先使用 该方法打开 zip 文件。然后我们使用 提取“word/document.xml”文件。open()
extractTo()
接下来,我们使用 找到 “word/media/” 文件夹的索引。如果找到该文件夹,我们将从该索引开始循环访问 zip 文件条目。对于“word/media/”文件夹中的每个条目,我们使用 .locateName()
extractTo()
请注意,此代码假定“word/media”文件夹及其内容在 DOCX 文件中以可预测的方式构建。如果结构不同或有其他特定要求,则可能需要相应地调整代码。
评论
1赞
DavidW
6/24/2023
这看起来像 ChatGPT
0赞
Ozan Kurt
6/24/2023
它有效......
上一个:Laravel下载并解压档案
评论