好。每个文件都存在,可读且可写。 ZIP不会产生错误,并输出:“numfiles:140 status:0”。
代码读取日志,检查特定文本,然后将许多图像导入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 :(得分: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);