2013-07-30 165 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);