2010-04-10 30 views
2

我創建一個SQL檔案,將這個文件轉換成一個zip文件的一些圖像,然後刪除與unlink.Strange事情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); 
} 
+0

非常難 - 取消()不能在同一時間比刪除某個文件的更多。我敢打賭,zip文件永遠不會被創建。 – 2010-04-10 10:03:41

+0

你沒有調用'$ zip-> close()'。不知道這是否會導致您的問題,但它似乎是一個好主意。 – Thomas 2010-04-10 10:05:10

+0

而是從String創建一個文件,然後將其添加到'ZipArchive'的,你也可以使用'$ zip-> addFromString()' http://www.php.net/manual/en/function.ziparchive-addfromstring.php – Thomas 2010-04-10 10:06:05

回答

2

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

賈裏德在kippage點com 03月 - 2009年01:08

它可能看起來有點明顯 一些,但它是在 代表我的疏忽。

如果要向要刪除的zip 文件添加文件,請確保在您調用 close()函數後刪除該文件。

如果添加到對象 的文件在保存時不可用,則不會創建zip 文件。

簡單的解決辦法:添加$zip->close()你打電話unlink($sqlFileName);和你應該罰款之前。

+0

+1是有道理的。 – zaf 2010-04-10 10:44:09

1

unlink()從未刪除了多個文件。不首先創建你的zip文件,因爲你不關閉存檔 - 基本上告訴PHP包存檔的頭,做壓縮等附加$zip->close()你的代碼。

UPDATE我剛纔讀的ZipArchive :: close()方法是在腳本的末尾自動調用,所以這個只剩下兩個選擇:要麼你給zip->open()調用失敗。或者你的代碼沒有進入foreach循環 - 留下一個空的歸檔文件。空檔案不會根據a comment in the function's doc創建。

+0

+1用於研究ZipArchive。 – 2010-04-10 10:25:36

+1

雖然拉鍊的關閉被稱爲在腳本的自動結束,因爲我刪除資源之前,我合上拉鍊,拉鍊還沒有生成 – RMcLeod 2010-04-10 10:38:59

相關問題