0

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

1 回答 1

0

ZipArchive::addFile() 方法接受文件的路径作为其第一个参数,但并非所有路径都是相同的。addFile() 方法默默地拒绝(错误?)文件,你永远不知道出了什么问题。另一种方法是:

// $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);
于 2014-01-31T12:42:15.273 回答