取消链接删除的不仅仅是传递给它的文件

时间:2010-04-10 10:01:45

标签: php filesystems

我正在创建一个SQL文件,将此文件放入带有一些图像的zip文件中,然后使用unlink删除SQL文件。删除它也会删除zip文件。

if (file_put_contents($sqlFileName, $sql) !== false) {
        $zip = new ZipArchive;
        if ($zip->open($workingDir . $now . '.zip', ZipArchive::CREATE) === true) {
            $zip->addFile($sqlFileName, basename($sqlFileName));
            if(! empty($images)) {
                foreach ($images as $image) {
                    $zip->addFile($imagesDir . $image, $image);
                }
            }
        }
        unlink($sqlFileName);
}

2 个答案:

答案 0 :(得分:2)

正如http://www.php.net/manual/en/function.ziparchive-addfromstring.php所述:

  

jared at kippage dot com 03-Sep-2009 01:08

     

看起来似乎有点明显   一些,但这是对我的疏忽   代表。

     

如果要将文件添加到zip中   要删除的文件   确定你在打电话后删除   close()函数。

     

如果文件已添加到对象中   拉链时保存时间不可用   将不会创建文件。

简单的解决方案:在致电$zip->close()之前添加unlink($sqlFileName);,您应该没问题。

答案 1 :(得分:1)

unlink() 从不删除多个文件。您的zip文件不是首先创建的,因为您没有关闭存档 - 这基本上告诉PHP包装存档的标题,进行压缩等。将$zip->close()附加到您的代码中。

更新我刚刚读到在脚本末尾自动调用ZipArchive :: close(),因此只留下两个选项:您对zip->open()的调用失败。或者你的代码没有进入foreach循环 - 留下一个空档案。不会根据a comment in the function's doc创建空档案。