创建zip时没有错误,但是没有创建

时间:2011-01-10 20:37:48

标签: php zip

我写了这段代码来创建一个ZIP文件并保存它。但不知何故,它只是没有显示任何错误,但它也没有创建ZIP文件。这是代码:

$zip = new ZipArchive;
$time = microtime(true);
$res = $zip->open("maps/zips/test_" . $time . ".zip", ZipArchive::CREATE);
if ($res === TRUE) {
    echo "RESULT TRUE...";
    $zip->addFile("maps/filename.ogz","filename.ogz"); //Sauerbraten map format
    $zip->addFromString('how_to_install.txt', 'Some Explanation...');
    $zip->close();
    $zip_created = true;
    echo "FILE ADDED!";
}

我做错了什么,我该如何解决?

6 个答案:

答案 0 :(得分:15)

可能apache或php没有权限在该目录中创建zip存档。来自ZipArchice::open的一条评论:

  

如果你正在写的目录或   保存到没有正确的   权限设置,你不会得到任何   错误消息,它看起来像   一切都很好......除了它   不会改变!

     

相反,请确保收集   ZipArchive :: close()的返回值。   如果它是假的......它没有用。

在if语句中添加else子句并转储$ res以查看结果:

if($res === TRUE) {
    ...
} else {
    var_dump($res);
}

答案 1 :(得分:9)

有两种情况,zip不会产生错误。

  1. 确保您添加到zip中的每个文件都有效。即使 当调用zip->close然后存档时,一个文件不可用 将失败,您的zip文件将不会被创建。
  2. 如果您的文件夹没有     有写权限zip不会报告错误。它会完成     但没有任何东西会被创造出来。

答案 2 :(得分:7)

在调用$ zip-> addFile之前,请检查您的每个文件是否存在,否则将不会生成zip并且不会显示错误消息。

if(file_exists($fichier->url))
{
    if($zip->addFile($fichier->url,$fichier->nom))
    {
        $erreur_ouverture = false;
    }
    else
    {
        $erreur_ouverture = true;
        echo 'Open error : '.$fichier->url;
    }
}
else
{
    echo 'File '.$fichier->url.' not found';
}

答案 3 :(得分:5)

我有一个完全相同的问题,即使有完整的写作/阅读权限。

通过手动创建“.zip”文件,然后将其传递给ZipArchive来解决:

$zip = new ZipArchive;
$time = microtime(true);
$path = "maps/zips/test_" . $time . ".zip"

touch($path);  //<--- this line creates the file

$res = $zip->open($path, ZipArchive::CREATE);
if ($res === TRUE) {
    echo "RESULT TRUE...";
    $zip->addFile("maps/filename.ogz","filename.ogz"); //Sauerbraten map format
    $zip->addFromString('how_to_install.txt', 'Some Explanation...');
    $zip->close();
    $zip_created = true;
    echo "FILE ADDED!";
}

答案 4 :(得分:1)

将其分解为步骤。

if ($res === TRUE) {

  check if file_exist

check if addFile give any error
}

if($zip->close())
{
 $zip_created = true; 
    echo "FILE ADDED!"
}

检查是否启用了zip的phpinfo:)

答案 5 :(得分:1)

如果您要添加文件而不是目录,则创建zip文件的原因之一是缺少检查。

if (!$file->isDir())

我找到了解决方案here