PHP zip文件提取 - 错误的条目大小

时间:2013-01-21 14:54:54

标签: php zip

我正在使用在线发票系统,他们的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。

2 个答案:

答案 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);

?>