我已经有一段时间了。这实际上工作了一次,然后再也没有。它根本不创建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 ..但是对于任何类型的现有文件都没有。
答案 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,据我所知,它的内存使用量更少。