php zip文件没有创建,尽管没有错误,没有权限问题,没有空文件夹,没有


php zip file not created despite no erros, no permission problems, no empty folders, no

好的。每个文件都存在、可读和可写。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);