我正在使用在线发票系统,他们的API允许我以字符串的形式下载PDF发票,这是在base64中压缩的pdf编码。
我使用base64_decode()解码此字符串,然后将其保存为文件:file_put_contents('temp/soubor.zip', $data);
现在如果我想在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文件,选择修复存档,并在我的脚本中打开修复的zip文件,我得到正确的大小和文件可以正确提取。 顺便说一下,归档文件只有260kB。
答案 0 :(得分:1)
看起来像是格式错误的档案,可能是在飞行中构建'来自未知大小的数据流,并非所有ZIP数据包都正确写入输出(或者,流不刷新,因此不写入中心目录)。 您可以通过运行zipinfo http://www.info-zip.org/mans/zipinfo.html
来查看详细的zip文件信息答案 1 :(得分:0)
要么以一种糟糕的方式保存你的zip,接收的缓冲区包含格式错误的数据。试试这个你保存文件而不是file_put_contents():
<?PHP
$handle = fopen('temp/soubor.zip', 'w');
fwrite($handle, base64_decode($zipdatabase64));
fclose($handle);
?>