在使用header()函数下载文件时需要帮助

时间:2010-05-03 15:17:39

标签: php header javascript

我尽力解释,对不起我的英语。 我有一个链接列表,每个链接到一个带参数id的php文件(例如download.php?id=1?id=2等)。 此文件创建一个类的新实例,返回文件的正确标题,以便显示浏览器的保存对话框。

现在我需要检查文件是否已经过去下载(第一次下载时我在mysql数据库上添加了一个字段)。 如果您没有下载文件,则进行此检查,否则返回false。

这是问题,当它返回false或其他东西时,浏览器会将我重定向到download.php文件,所以我得到一个空白页面或我正在回应的内容。 我需要,如果该文件已经下载,它会向我显示一个js警告,提供建议ppl。 希望你能明白我的意思。 谢谢你的帮助

4 个答案:

答案 0 :(得分:2)

从技术上讲,没有ajax,如果用户已下载文件,download.php可以输出以下内容:

<script>
alert('It was false - you already have the file!');
window.back();
</script>

仅取决于它与您网站的整合程度。没有测试,但这是一般的想法。

答案 1 :(得分:0)

在这种情况下显示js警报为时已晚,您需要执行类似ajax的操作来检查文件是否已下载,然后显示警报或开始下载文件。

一旦您的网络浏览器开始加载新网址(例如download.php),那么为时已晚,您已经离开了当前页面。

答案 2 :(得分:0)

所以你有一个看起来像的页面:

1. file1
2. file2
3. file3

他们已经获得了每个下载脚本的链接。如果要阻止多次下载,请在两个位置执行。在主文件列表页面和download.php页面上。当用户单击其中一个文件时,您有一个onclick处理程序从所单击的文件中删除该链接。这可以通过刷新此页面来完成(并且只是在生成页面时不添加下载链接),或者使用一些DOM操作来删除文件名周围的标记。

下载页面还会检查文件是否已经发送过,并且可以自行处理该条件。

如果客户端没有启用Javascript,无论出于何种原因,在这两个地方这样做都会很好地降级。

答案 3 :(得分:0)

您需要在两个地方处理它以获得最佳行为。

  1. 确定用户是否可以在生成下载页面时下载文件,并且不为无法下载的文件创建链接。

  2. 要处理打开多个窗口或以其他方式下载文件但未重新下载下载页面的情况,请检查用户是否可以在发送之前在download.php 中下载文件任何标题。如果他不能,请将重定向发送回下载页面:

    header("Location: downloads.php?error=repeat_download");
    exit;
    

    ...并使用error参数在文件列表顶部添加一条消息,说明发生了什么。