php zip提取使文件为空

Posted

技术标签:

【中文标题】php zip提取使文件为空【英文标题】:php zip extract makes file empty 【发布时间】:2020-06-17 12:41:05 【问题描述】:

好吧,这让我抓狂了……我抽象了代码,因为它来自一个大项目。但在我的项目中,我最终评论了所有内容,只剩下这个仍然导致问题,我不知道为什么。

$f = fopen('tmp/'.$name.'.zip', 'wb');
fwrite($f, $myzip);
fclose($f); //I can open this file manually and everything is fine
$zip = new ZipArchive;
$res = $zip->open('tmp/'.$name.'.zip'); //$res is "1"
$zip->extractTo("final/" . $unique);
$zip->close();

如您所见,我在/tmp 中编写了一个 zip 文件,此时,我可以手动打开该文件,它包含所有大小正确的文件。 但是在我把它解压到/final之后,由于某种原因,有些文件是空的...... 知道是什么原因造成的吗?

【问题讨论】:

您是否在创建 zip 文件后,在解压之前检查文件内容?它是否包含所需的所有文件? 是的,只有解压后,解压后的文件是空的 您可以尝试提取到静态路径:$zip->extractTo("/final/myPath/");。您是否在空文件中看到任何模式(即 - 文件扩展名)? 【参考方案1】:

您可以通过在 zip 存档打开时抛出异常来做到这一点,

function DecompressFile()

    $zip = new ZipArchive;
    if ($zip->open('tmp/'.$name.'.zip') === TRUE) 
        $zip->extractTo("final/" . $hwidDir);
        $zip->close();
        return 'completed';
    
    else 
        throw new Exception ("Decompress operation from ZIP file failed.");
    

【讨论】:

以上是关于php zip提取使文件为空的主要内容,如果未能解决你的问题,请参考以下文章

PHP提取zip [重复]

dedecms中提取的zip压缩文件操作类zip.class.php

PHP Zip:提取目录的内容

在php中提取ZIP,覆盖所有内容

在 PHP 中是不是可以在不先提取其内容的情况下检查 Zip 文件的内容?

使用 PHP,我如何识别(如果适用,解压缩)并从 .tar、.gz、.tar.gz、.zip 文件中提取文件?