2011-01-10 45 views
13

我編寫了這段代碼來創建一個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!"; 
} 

我在做什麼錯,我該如何解決它?

+0

「RESULT TRUE」和「FILE ADDED」輸出結果是?你在找正確的文件夾嗎?你是否啓用了錯誤報告?問題,問題:P – PeeHaa 2011-01-10 20:39:46

+1

您是否檢查過PHP對該目錄有寫權限? – alexn 2011-01-10 20:40:04

+0

Nooo! :D亞歷山大是對的!該腳本沒有足夠的訪問權限... thx解決。如果你很快發佈,我會標記爲正確的答案......? – 2011-01-10 20:43:32

回答

14

可能apache或php沒有權限在該目錄中創建zip存檔。從ZipArchice::open一個評論:

如果你正在寫保存到該目錄或 沒有正確 權限設置,你不會得到任何 錯誤消息和它看起來像 一切工作罰款...除了它 不會改變!

而是確保你收集ZipArchive :: close()的返回值 。 如果它是錯誤的...它不起作用。

添加一個else子句到您的if語句和轉儲$水庫看到的結果:

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

掰成步驟。

if ($res === TRUE) { 

    check if file_exist 

check if addFile give any error 
} 

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

檢查郵編的phpinfo啓用或不:)

5

退房您的每一個文件的存在調用$ zip-> addFile否則拉鍊不會產生之前,沒有錯誤信息會被顯示。

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'; 
} 
8

有2種情況,當zip不會產生錯誤。

  1. 確保您要添加到zip的每個文件都是有效的。即使 一個文件在
    zip->close被調用時不可用,那麼存檔 將失敗,並且不會創建您的zip文件。
  2. 如果你的文件夾沒有 有寫權限zip不會報錯。它將完成 ,但不會創建任何內容。
4

即使具有完整的書寫/閱讀權限,我也有完全相同的問題。

通過創建「.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!"; 
} 
1

其中一個原因zip文件未創建是由於缺少檢查,如果要添加文件,而不是目錄。

if (!$file->isDir()) 

我找到了解決方案here

相關問題