我创建了以下代码来创建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();
答案 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,具体取决于操作系统和发行版。)