通过路径从数据库中检索文件

时间:2012-04-16 16:34:46

标签: php upload phpmyadmin

我有一个简单的html表单,可以保存电子邮件和多个附件路径。我正在保存服务器上的文件及其到数据库的路径。

现在我如何从其路径中检索文件,然后将其显示给用户,当点击“下载”时,我使用以下代码获取文件,但这不起作用

$query = "
     SELECT `type`, `name`, `size`, `file1`,`file2`,`file3`,`file4`,`file5`
     FROM `upload` WHERE `id` = {$id}";
    $result = $dbLink->query($query);

    if($result) {
         if($result->num_rows == 1) {
             $row = mysqli_fetch_assoc($result);
            header("Content-Type: ". $row['type']);
            header("Content-Length: ". $row['size']);
            header("Content-Disposition: attachment; filename=". $row['name']);

            $path = $row['file1']; 
            $dir = opendir($path);
             echo $dir;
          while ($dir && ($file = readdir($dir)) !== false) {
             echo $file;
                }

回显的文件不包含任何数据。

我现在只做一个文件,其路径为“file1”。同样,我有5个附件路径,我必须在这段代码中全部检索它们。 请问我该怎么做。

1 个答案:

答案 0 :(得分:0)

首先:您不能有这样的多个下载。您只能发送一次该标题即可。

$ path是文件的完整路径吗?您可以尝试使用is_readable($ file)在测试中首先进行检查。一旦你掌握了完整的路径,那很简单。

header("Content-Type: application/octet-stream");
header("Content-Length: ". $row['size']);
header("Content-Disposition: attachment; filename=". $row['name']);
readfile($row['file1']);
exit();

Readfile直接输出并对其进行流式传输,因此您无需阅读内容然后将其输出。添加退出以确保在其后没有添加其他输出,或者您可能损坏该文件。

这是有效的,假设$ row [' file1']有正确的路径!

对于多个文件,您必须进行多次调用。就像给用户多个链接一样,他们可以点击进行下载。

唯一的选择是你使用zip将它打包在一起,并将其作为一个大型zip文件发送。