2011-03-24 16 views
7

我一直在這一段時間。這實際上工作了一次,然後再也沒有。它根本不會創建zip文件。該文件確實存在。使用zipArchive addFile()不會將圖像添加到zip

$zip = new ZipArchive(); 
$filename = "./test" . time() .".zip"; 

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {  
    exit("cannot open <$filename>\n"); 
} 

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip"; 
$zip->addFile($thisdir . "/trash-icon.png", "/gabage.png"); 
echo "numfiles: " . $zip->numFiles . "\n"; 
echo "status:" . $zip->status . "\n"; 
$zip->close(); 

如果我添加類似

$zip->addFromString("testfilephp.txt", "#1 This is a test string added as testfilephp.txt.\n"); 

它創建與它的txt文件的zip ..但一個沒有去爲anytype類型現有的文件。

+0

'/ trash-icon.png'幾乎肯定是錯誤的,因爲它指向服務器的根目錄。你是否100%確定你試圖添加的文件實際上存在? – 2011-03-24 17:23:03

+0

您確定/trash-icon.png確實存在,請記住它位於文件系統根目錄 – 2011-03-24 17:24:02

+0

http://www.php.net/manual/de/function.ziparchive-addfile.php#101605 – mario 2011-03-24 17:25:17

回答

0

ZipArchive::addFile()方法接受文件路徑作爲其第一個參數。


在這裏,你正在使用:

$zip->addFile("/trash-icon.png", "/gabage.png"); 

這意味着你正試圖將/trash-icon.png文件添加到您的檔案。


您確定此文件存在嗎?

注意在該文件的路徑的開頭有一個/,這表示它是絕對路徑。
也許/應該被刪除,使用相對路徑?

+0

對不起,這是我嘗試過的衆多迭代之一的一個不好的例子。代碼更新 – Vance 2011-03-24 17:29:29

10

ZipArchive :: addFile()方法接受文件的路徑作爲其第一個參數,但並不是所有路徑都是相同的。 addFile()方法默默拒絕該文件,並且永遠不知道出了什麼問題。如可以從問題中導出,另一種方法將是:

// $zip->addFile($file); 
$content = file_get_contents($file); 
$zip->addFromString(pathinfo ($file, PATHINFO_BASENAME), $content); 

除了獲得()中的代碼的工作,也的file_get_contents體面生成的錯誤消息。

+0

這工作對我來說,並保存我從瘋狂! – 2014-09-16 09:26:09

+0

聰明的解決方法!我可以通過這種方式找到我的錯誤。我也從瘋狂中解救出來! – dsnunez 2014-12-09 14:26:57

+0

感謝您的解決方法。即使文件is_readable添加文件失敗。 – 2016-01-18 10:38:23

0

請參閱此問題的答案 - 它也適用於圖像,並使用addFile而不是addFromString,據我所知,內存使用情況較輕。

0

我有類似的問題,它與我將要添加到zip文件中的文件有關。

在將文件添加到zip存檔之前,最好檢查文件是否存在。

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip"; 
if (file_exists($thisdir . "/trash-icon.png")) { 
    $zip->addFile($thisdir . "/trash-icon.png", "/gabage.png"); 
}