gpt4 book ai didi

php - 提取 zip 中的特定文件(包括子目录)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:35 24 4
gpt4 key购买 nike

我只想从 zip 文件中提取图像,但我也希望它也提取在子文件夹中找到的图像。我如何根据下面的代码实现此目的。注意:我不是要保留目录结构在这里,只想提取在 zip 中找到的任何图像。

//extract files in zip
for ($i = 0; $i < $zip->numFiles; $i++) {
$file_name = $zip->getNameIndex($i);
$file_info = pathinfo($file_name);
//if ( substr( $file_name, -1 ) == '/' ) continue; // skip directories - need to improve
if (in_array($file_info['extension'], $this->config->getValidExtensions())) {
//extract only images
copy("zip://" . $zip_path . "#" . $file_name, $this->tmp_dir . '/images/' . $file_info['basename']);
}
}
$zip->close();

编辑

我的代码工作正常,我只需要知道如何让 ziparchive 也进入子目录

最佳答案

您的代码是正确的。我创建了 a.zip 文件 a/b/c.png, d.png:

$ mkdir -p a/b
$ zip -r a.zip d.png a
adding: d.png (deflated 4%)
adding: a/ (stored 0%)
adding: a/b/ (stored 0%)
adding: a/b/c.png (deflated 8%)

$ unzip -l a.zip
Archive: a.zip
Length Date Time Name
--------- ---------- ----- ----
122280 11-05-2016 14:45 d.png
0 11-05-2016 14:44 a/
0 11-05-2016 14:44 a/b/
36512 11-05-2016 14:44 a/b/c.png
--------- -------
158792 4 files

代码将 a.zip 中的 d.pngc.png 提取到目标目录中:

$arch_filename = 'a.zip';
$dest_dir = './dest';
if (!is_dir($dest_dir)) {
if (!mkdir($dest_dir, 0755, true))
die("failed to make directory $dest_dir\n");
}

$zip = new ZipArchive;
if (!$zip->open($arch_filename))
die("failed to open $arch_filename");

for ($i = 0; $i < $zip->numFiles; ++$i) {
$path = $zip->getNameIndex($i);
$ext = pathinfo($path, PATHINFO_EXTENSION);
if (!preg_match('/(?:jpg|png)/i', $ext))
continue;
$dest_basename = pathinfo($path, PATHINFO_BASENAME);
echo $path, PHP_EOL;
copy("zip://{$arch_filename}#{$path}", "$dest_dir/{$dest_basename}");
}

$zip->close();

测试

$ php script.php
d.png
a/b/c.png

$ find ./dest -type f
./dest/d.png
./dest/c.png

所以代码是正确的,问题一定出在其他地方。

关于php - 提取 zip 中的特定文件(包括子目录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40373564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com