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

时间:2013-07-30 22:53:54

标签: php permissions zip

好。每个文件都存在,可读且可写。 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);
?> 

1 个答案:

答案 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);