无法使用PHP创建zip文件

时间:2013-05-11 12:28:47

标签: php

我创建了以下代码来创建zip文件。我正在从数据库中提取文件列表,具体取决于$ job_number(我从全局$ _GET数组中获取),然后尝试将它们添加到zip文件中。

那部分工作正常。它正在从数据库中提取文件列表,我可以通过回显或转储print_r结果来看到。

唯一的问题是根本没有创建.zip文件。我看不出哪里出错了。

$sth = $conn->prepare('SELECT `dp_filename` FROM damage_pics WHERE dp_job_number = :job_number');
$sth->bindParam(':job_number', $job_number);
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();

$zip = new ZipArchive();
$zip->open('example5.zip', ZipArchive::CREATE);
$result = $sth->fetchAll();


echo '<pre>';
print_r($result);

foreach ($result as $file)
{
    // just echoing for testing purposes to see if file name is created correctly.
    $image = $file['dp_filename'];
    echo $image . "<br />";
    $zip->addFile("uploads/{$image}");
}

$zip->close();

1 个答案:

答案 0 :(得分:1)

听起来您的PHP脚本运行时没有足够的权限写入目标目录。我做了一些实验,在这种情况下,$ zip-&gt; open()调用会无声地失败而没有出现问题的迹象。

您可以将以下代码放在顶部以确定这是否确实是问题:

$fp = fopen('example5.zip', 'w');
if ($fp === FALSE) { die("Cannot open example5.zip for writing"); }
fclose($fp);

要解决此问题,我建议使用绝对路径和文件名(例如/tmp/example5.zip),然后确保目标目录可由执行脚本的用户写入(可能是用户正在运行) HTTP服务器软件,如www-data或httpd,具体取决于操作系统和发行版。)