PHP 中 ZipArchive 的损坏提取
Corrupt extraction with ZipArchive in PHP
我有一个 PHP 脚本,它必须解压缩一些上传的内容。上传的是打包文件夹,基本上是带有自定义扩展名的 zip 文件。
我在一台机器上打包的一些 zip 文件有问题,但在另一台机器上打包的相同文件夹没有问题。在这两种情况下,压缩都是使用相同的 Java 库完成的。
如果我查看他们的权限,这就是我所看到的(01_Orig
没问题,02_Modif
已损坏):
如果我查看带有 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 是对的。谢谢大家帮我快速解决这个问题!
我有一个 PHP 脚本,它必须解压缩一些上传的内容。上传的是打包文件夹,基本上是带有自定义扩展名的 zip 文件。
我在一台机器上打包的一些 zip 文件有问题,但在另一台机器上打包的相同文件夹没有问题。在这两种情况下,压缩都是使用相同的 Java 库完成的。
如果我查看他们的权限,这就是我所看到的(01_Orig
没问题,02_Modif
已损坏):
如果我查看带有 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 是对的。谢谢大家帮我快速解决这个问题!