代码之家  ›  专栏  ›  技术社区  ›  RMcLeod

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

  •  2
  • RMcLeod  · 技术社区  · 15 年前

    我正在创建一个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 回复  |  直到 15 年前
        1
  •  2
  •   Dan Soap    15 年前

    写在 http://www.php.net/manual/en/function.ziparchive-addfromstring.php :

    Jared at Kippage.com 2009年9月3日01:08

    似乎有点明显 但这是我的疏忽 代表。

    如果要向zip添加文件 要删除的文件使 当然,在调用 close()函数。

    如果文件添加到对象 在节省时间时无法使用zip 不会创建文件。

    简单的解决方案:添加 $zip->close() 在你打电话之前 unlink($sqlFileName); 你应该没事的。

        2
  •  1
  •   soulmerge    15 年前

    unlink() 从未 删除多个文件。您的zip文件不是首先创建的,因为您没有关闭归档文件——这基本上告诉PHP包装归档文件的头文件,执行压缩等操作。 $zip->close() 您的代码。

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

    推荐文章