2013-07-30 164 views
0

好吧。每個文件都存在,可讀且可寫。 ZIP不會產生錯誤,並輸出:「numfiles:140 status:0」。儘管沒有錯誤,沒有創建php zip文件,沒有權限問題,沒有空文件夾,沒有

該代碼讀取日誌,檢查特定文本,然後將多個圖像導入zip文件夾。一切運行良好,除了zip文件夾始終爲空。我已經閱讀了很多關於此的線索,並且他們都通過更改權限,修改路徑和檢查讀/寫/存在/錯誤來解決。但是......沒有任何工作。這是怎麼回事?

<?php 
$file = fopen("log.log", "r") or exit("Unable to open file!"); 

$zip = new ZipArchive(); 
$filename = "E:/Web Sites/whatever/order_stream/images.zip"; 
$try_file = $zip->open($filename,ZIPARCHIVE::OVERWRITE); 

if ($try_file !== true) { 
    exit("cannot open <$filename>\n"); 
} 

while(!feof($file)) { 
    $line = fgets($file); 
    $results = explode(": ", $line); 
    if ($results[0] == "Copying" || $results[0] == "File already exists, overwriting") { 
     $file_name = substr($results[1],19); 
     $to_zip = "E:/Web Sites/whatever/catalog/pictures/".$file_name; 
     $to_zip = trim($to_zip); 
     if (file_exists($to_zip)) { 
      $zip->addFile($to_zip); 
     } 
    } 
} 

echo "numfiles: " . $zip->numFiles . "\n"; 
echo "status:" . $zip->status . "\n"; 

$zip->close(); 
fclose($file); 
?> 

回答

0

的ZipArchive :: addFile()方法接受文件路徑作爲第一個參數,但不是所有路徑都是一樣的。 addFile()方法默默地拒絕(bug?)文件,你永遠不知道哪裏出了問題。另一種方法是:

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

除了獲得該代碼工作,file_get_contents()函數,如果你還路徑作出了錯誤產生像樣的錯誤消息。在這個例子中

$file = $full_directory_path_ending_with_slash.$filename; 

由於上述問題,你有你的手指部分,代碼可以簡單地變成:

$content = file_get_contents($to_zip); 
$zip->addFromString($filename, $content);