好的。每个文件都存在、可读和可写。ZIP不产生错误,并输出:"numfiles:140状态: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);
?>
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);