使用zipArchive addFile()不会将图像添加到zip

时间:2011-03-24 17:18:27

标签: php ziparchive

我已经有一段时间了。这实际上工作了一次,然后再也没有。它根本不创建zip文件。该文件确实存在。

$zip = new ZipArchive();
$filename = "./test" . time() .".zip";

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {      
    exit("cannot open <$filename>\n");
}

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip";
$zip->addFile($thisdir . "/trash-icon.png", "/gabage.png");
echo "numfiles: " . $zip->numFiles . "\n";
echo "status:" . $zip->status . "\n";
$zip->close();

如果我添加类似

的内容
$zip->addFromString("testfilephp.txt", "#1 This is a test string added as testfilephp.txt.\n"); 

它创建了包含txt文件的zip ..但是对于任何类型的现有文件都没有。

4 个答案:

答案 0 :(得分:11)

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

// $zip->addFile($file);
$content = file_get_contents($file);
$zip->addFromString(pathinfo ( $file, PATHINFO_BASENAME), $content);

除了使代码正常工作之外,file_get_contents()还会生成不错的错误消息。

答案 1 :(得分:2)

ZipArchive::addFile()方法接受文件的路径作为其第一个参数。


在这里,您正在使用:

$zip->addFile("/trash-icon.png", "/gabage.png");

这意味着您正在尝试将/trash-icon.png文件添加到存档中。


你确定这个文件存在吗?

注意在该文件的路径的开头有一个/,表示它是一个绝对路径。
也许应该删除/,使用相对路径?

答案 2 :(得分:1)

我有类似的问题,它与我要添加到zip存档的文件有关。

在将文件添加到zip存档之前,最好先检查文件是否存在。

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip";
if (file_exists($thisdir . "/trash-icon.png")) {
    $zip->addFile($thisdir . "/trash-icon.png", "/gabage.png");
}

答案 3 :(得分:0)

查看这个问题的答案 - 它也适用于图像,并使用addFile而不是addFromString,据我所知,它的内存使用量更少。