如何在PHP中创建动态下载链接

时间:2012-03-15 17:02:18

标签: php email

我们是否可以在一段时间内为单个文件在PHP中创建动态下载链接,或者在此之后下载链接到期。在此期间之后,下载链接会更改。

实际上我有一个要求,即只能通过特定的电子邮件访问下载链接。由于文件的大小,我无法将该文件添加为附件。

任何人都可以帮助我。

5 个答案:

答案 0 :(得分:5)

一个解决方案:

  1. 创建一个数据库表,该表存储一个大的唯一ID(随机),以及要下载的文件的名称/位置/内容。还包括过期日期。

    id                    | filename           | expires
    ----------------------+--------------------+--------------------
    fsdhfs7dfsniuf92un3f2 | secret.doc         | 2012-03-23 23:32:32
    sdf8shdf829nf32ufn23f | secret2.doc        | 2012-03-13 23:32:33
    
  2. 通过电子邮件发送给最终用户的链接......链接应该是:

    http://yoursie.com/download/fsdhfs7dfsniuf92un3f2
    
  3. 使用apache重写规则(mod_rewrite),它将捕获漂亮的链接并将其传递给PHP页面:

    RewriteEngine on
    RewriteRule ^/download/([a-z0-9]{20})$  /download.php?id=$1
    
  4. 在该脚本download.php中,请查看$_GET['id']。运行数据库查询以查找记录。检查到期日期。如果一切正常,那就继续。

  5. 使用PHP脚本输出正确的标题并下载文件,或者将内部重定向发送到前端代理,如nginx,这会将下载过程卸载到nginx,而不是将PHP与下载。

  6. 无论哪种方式,您都可以使用安全,可过期的链接发送给最终用户。

    小心!

答案 1 :(得分:2)

当然,将文件的路径存储在数据库中,以及唯一标识符和到期时间戳。然后,当用户在get变量中访问具有唯一ID的链接时,请检查时间戳并获取文件/相应地显示错误。

答案 2 :(得分:0)

数据库表:

ID 文件(在公共可访问的路径之外) 到期

然后有一个脚本get-file.php?id = XXXXXX

<?not-real-code
Delete everything expired from table

Look up record for id=XXXXXXX

If exists then use something like readfile() to read and output file

Delete record in table

答案 3 :(得分:0)

您可以安装一个数据库,您可以在其中放置文件,时间戳和表格。然后,在您的脚本中,您可以检查时间戳+ 86400 *天(86400是一天的秒数)。如果下载是在该时间范围内,则允许下载,否则不允许。然后,您可以使用readfile()输出要下载的文件,并使用header()调用调整编码。要获得更具体的帮助,您必须发布一些代码。

答案 4 :(得分:0)

  1. 在Web服务器上创建一个文件夹,其中包含一个index.php文件,该文件表明该文件不再可用。
  2. 如果需要,创建一个指向index.php的.htaccess文件。
  3. 将要下载的文件添加到Web服务器上的文件夹中。
  4. 发送包含链接的电子邮件。
  5. 如果您觉得时间已经用完,请删除该文件,人们会转到index.php。
  6. 注意:如果您需要自动执行任何此类查看cron作业。