11

我已经有一段时间了。这实际上工作了一次,然后再也没有。它根本不会创建 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

3 回答 3

14

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

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

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

于 2014-01-31T12:26:00.737 回答
2

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


在这里,您正在使用:

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

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


你确定这个文件存在吗?

请注意,该文件 path 的开头有 a/,表示它是绝对路径。
也许/应该将其删除,以使用相对路径?

于 2011-03-24T17:23:03.840 回答
1

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

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

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip";
if (file_exists($thisdir . "/trash-icon.png")) {
    $zip->addFile($thisdir . "/trash-icon.png", "/gabage.png");
}
于 2015-11-25T12:12:08.903 回答