0

我创建了以下代码来创建一个 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();
4

1 回答 1

1

听起来您的 PHP 脚本正在运行,但没有足够的权限写入目标目录。我做了一些实验,在这种情况下,$zip->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,具体取决于操作系统和发行版)。

于 2013-05-11T13:01:02.233 回答