使用存储在MySQL中的文件路径下载PHP OnClick文件

时间:2014-01-27 16:00:41

标签: php mysql download

我已经搜索了很长时间,并没有看到可以解决我的问题的东西。我正在处理显示文件列表的页面,当OnClick时,将允许用户下载该文件。文件路径存储在MySQL中以便下载 目前我正在使用带有SQL查询的while循环来检索和显示(回显)文件。

  1. logID = MySQL中的自动增量ID
  2. logDate = DateTime value
  3. fileLink =存储在MySQL中的文件路径(例如C:\ www \ wamp \ file.txt)

    while ($row = mysql_fetch_array($result)) {
    $ID =$row['logID'];
    $date =$row['logDate'];
    $file =$row['fileLink'];
    echo $ID, ' ';
    echo $date, '<br/>';
    }
    
  4. 现在屏幕上显示如下,
    1 2014-01-25 09:33:27
    2 2014-01-26 09:37:28
    3 2014-01-27 09:38:09

    我想将“echo $ date”的日期和时间写入超链接(我有麻烦),这将允许用户点击下载文件。我有一个文件下载代码,

    <?php
    if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
    }
    ?>
    

    问题是当此下载代码在页面上时,下载框会在页面加载时立即显示,并且只提供下载“2014-01-27”文件的选项,这是最后检索到的项目SQL while循环。

    我已经读过下载代码应该在另一个.php文件中,该文件将在需要时调用,但我是PHP的新手并且不知道如何去做。

    主要是我的问题,

    1. 如何使回显项目成为带有onclick事件的超链接以触发下载。
    2. 如何将文件路径绑定到相应的回显项目,因为现在$ file将存储由于while循环导致的最后一条记录的文件路径。
    3. 如果上述情况可能,并且下载代码位于另一个.php文件中,如何将相应的$ file变量值传递给该.php文件,以使该方法有效。
    4. 提前感谢您,感谢您给予的任何帮助。

3 个答案:

答案 0 :(得分:1)

  

我已经读过下载代码应该在另一个.php文件中,该文件将在需要时调用

情况确实如此。从请求/响应的角度考虑这一点,您的PHP代码基本上需要响应两种不同的请求:

  • 对文件列表的请求
  • 对特定文件的请求

这两件事将在两个不同的PHP文件中。假设第一个被称为list.php。它只显示文件列表的HTML内容。它可能就像你拥有的一样简单:

while ($row = mysql_fetch_array($result)) {
    $ID =$row['logID'];
    $date =$row['logDate'];
    $file =$row['fileLink'];

    echo $ID, ' ';
    echo $date, '<br/>';
}

你提到你希望日期是超链接,对吗?然后用超链接标记围绕它。像这样:

echo '<a href="download.php?id=' . $ID . '">' . $date . '</a>', '<br />';

注意我在这里做了几件事。日期值不仅现在被超链接包围,而且超链接还包含几个组件:

  • download.php,我将假设是第二页的名称。当然,它可以是你决定的任何事情。
  • $ID,这是发送到第二页的值,因此它知道单击了哪个文档。这是URL上的查询字符串值,将在$_GET['id']的第二页上获取。注意:用户可以更改的值,不要将其作为安全措施。始终验证用户是否有权在第二页本身下载他们请求的文件。

第二页download.php将包含用于将文件写入输出的代码。标题信息,文件内容等。在该页面中,您将获得所请求文件的ID($_GET['id']),从数据库或文件系统或任何位置获取该文件,然后发送用你拥有的代码给用户。

这样,用户就会看到第一页,然后可以点击他们想要向他们想要的文件的第二页发出请求的任何链接。

答案 1 :(得分:0)

根据您的问题1和2:

while ($row = mysql_fetch_array($result)) {
   $ID =$row['logID'];
   $date =$row['logDate'];
   $file =$row['fileLink'];
   echo $ID, ' ';
   echo '<a href="'.$file.'">'.$date.'</a><br/>'; // Hyperlink to file.
}

对于第3期,您可以尝试

  while ($row = mysql_fetch_array($result)) {
       $ID =$row['logID'];
       $date =$row['logDate'];
       $file =$row['fileLink'];
       echo $ID, ' ';
       echo '<a href="yourfile.php?file='.$file.'">'.$date.'</a><br/>';
    }

答案 2 :(得分:0)

据我所知,您希望拥有多个链接,为该特定日期提供日志文件。

您应该有一个文件将日志文件列表作为数组准备或在您的while循环中执行以下操作:

echo "<a href='download.php?logId={$row['logID']}'>{$row['logDate']}</a>";

然后你应该创建download.php(你已经准备好的下载脚本),它将根据logId GET参数提供文件(对数据库的另一个查询得到filePath)。