gpt4 book ai didi

java - PHP 中 ZipArchive 的损坏提取

转载 作者:行者123 更新时间:2023-12-02 08:53:57 25 4
gpt4 key购买 nike

我有一个 PHP 脚本,必须解压缩一些上传的内容。上传的是打包文件夹,基本上是带有自定义扩展名的 zip 文件。

我在一台机器上打包的一些 zip 文件遇到问题,但在另一台机器上打包的同一文件夹则没有问题。在这两种情况下,压缩都是使用相同的 Java 库完成的。

这是预期的结果,然后 PHP 进一步处理: correct extraction

这是损坏的结果,它使 PHP 窒息: corrupted extraction

如果我查看他们的权限,我会看到以下内容(01_Orig 没问题,02_Modif 已损坏): permissions

如果我使用 unzip -l 查看两个包(第一个没问题,第二个已损坏): unzip -l

这是我的 PHP 函数(在两种情况下都是相同的):

$uploads = "uploads_dir/";
$dir = new DirectoryIterator("uploads_dir/");

foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
$filename = $fileinfo->getFilename();
$zip = new ZipArchive;
$res = $zip->open($uploads . $fileinfo);
if ($res === TRUE) {
$zip->extractTo($uploads . $filename . "_extracted");
$zip->close();
} else {
echo "Unable to unzip";
}
}
}

当我在 Windows 计算机中手动解压或使用 7zip 打开这两个上传文件时,它们看起来都很好。

如果我创建两个 zip 文件的两个十六进制转储并比较它们,这就是我得到的结果:https://gist.github.com/msoutopico/22a9ef647381c2e4d26313f135c526e2

提前非常感谢您提供任何提示。

更新:

如果相关的话,zip 文件是在 Linux 服务器中创建(保存)的,并且完成此操作的两台计算机(有效的计算机和损坏包的计算机)都运行 Windows 10。

最佳答案

已排序。该插件的第 2 版经过调整,将文件名中的路径分隔符从 \ 转换为 /。现在,尽管两台机器上都安装了该插件的版本 3,但在故障机器中还有一个较旧的版本(版本 1,在该调整之前),它是正在使用的版本而不是版本 3。删除版本 1 重复项已解决该问题。 @pmqs 是对的。谢谢大家帮我快速解决这个问题!

关于java - PHP 中 ZipArchive 的损坏提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60601766/

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