我使用的是在线发票系统,它们的API允许我下载PDF格式的发票,格式为以base64压缩pdf格式的字符串。 我用base64_decode()解码这个字符串,然后将它保存为文件:file_put_contents('temp/soubor.zip', $data);
PHP zip文件提取 - 错误的条目大小
现在,如果我想在Windows中打开这个zip文件,那就没问题。但我想通过PHP来提取它,如果我称之为:
$zip = new ZipArchive;
if ($zip->open('temp/soubor.zip') === TRUE) {
print_r($zip->statIndex(0));
$zip->close();
}
我得到
Array ([name] => zipEntryName [index] => 0 [crc] => 1906707552 [size] => -1 [mtime] => 1358774308 [comp_size] => -1 [comp_method] => 8)
一切都很好,除了大小 - 这是-1,这是一个巨大的问题,因为它不会提取任何东西
现在有趣的事情:如果我打开在WinRAR压缩文件,选择修复档案,并在我的脚本打开修复的ZIP文件,我得到正确的尺寸和文件可以被正确地提取。 btw存档文件只有260kB。
如果您必须修复才能打开它。这听起来像原始存档是腐败或使用某种不寻常或不完整的。你确定这是zip,而不是像gzip? – datasage
我不确定它是否真的被损坏。 WinRar非常强大,因此它会打开甚至轻微损坏的文件。看来数据没问题,只有php无法正确读取压缩文件的大小。该文件是ZIP64 – Mroz
它也会检测到打开的gzip文件。你能读取文件的前4个字节并发布吗?它会帮助我确定文件的确切格式(魔术字节)。 – datasage