为PDF文件生成唯一的下载链接

时间:2016-10-11 18:13:57

标签: php html mysql sql pdf

大家好,我是新来的,请保持友好,不要因为我是初学者而生气。

为您介绍:

首先我生成了一个pdf并在用户将文件购买到我服务器上的受保护文件夹后保存。比我在数据库中使用id保存此文件的路径。

第二个有一个php文件,我在这里显示用户内容/从数据库中输入文件的下载链接。

我的链接如下:

<a href="http://my-website.de/download?link=<?php echo $row["url_to_my_file"] ?>" target="_blank">Download you file</a>

当用户点击它时,他将被重定向到我的download.php,在那里我获取网址并向用户发送下载内容:

$my_file = file_get_contents($_GET['link']);
$size = strlen($my_file);
$file_name = 'My_file_name.pdf';

header('Content-Disposition: attachment; filename="' . $name . '"');
header('Content-Type: application/pdf');
header('Content-Length: ' . $size);
echo $my_file;

一切正常,但我有一个大问题。当用户右键单击链接时,他可以看到文件所在的路径,他可以像他的脑子(而不是我的)一样下载文件,也可以在我锁定他可以下载文件的网站时因为他知道下载链接。

当用户点击下载时,我无法生成md5字符串并将其保存在我的数据库中。这是我的方法:

//Generate unique download key
$key = md5(uniqid(rand(), true));
//Insert into my database
$sql = "INSERT INTO download_keys (md5_key, expired, download_link) 
    VALUES ('$key', false, '$url')";

Seacond为用户提供了一个新链接:

<a href="http://my-website.de/download?link='$key'" target="_blank">Download you file</a>

但我不能在我的文件中这样做,我向用户显示文件,不知道如何处理多个文件?

这是我的新下载.php

$key = $_GET['key'];

$sql = "SELECT download_link FROM download_keys WHERE '$key' = md5_key AND expired = 'false'";
//Check if sql is empty or not
if (mysql_num_rows($sql)==0) {
    echo "No file found or key expired!";
} else {
    $link = $row["download_link"];
}
$sql = "UPDATE download_link SET expired = 'true' WHERE '$key' = md5_key";

最后我将expire值更改为true,因此当用户想要再次使用此链接下载文件时,它不起作用。

有什么方法可以实现这种独特的文件下载功能,以便用户只看到密钥而不是路径?

总而言之:我想制作一个秘密的下载链接,用户只能使用一个链接。要再次下载该文件,即使他知道网址,也可以点击网站上的下载按钮

感谢您的帮助!我希望你能解决我的问题。感谢。

1 个答案:

答案 0 :(得分:0)

啊,你的意思是如何将链接显示为"http://my-website.de/download?link=baksjcbasduo123231sdsad"而不是"http://my-website.de/download?link=baksjcbasduo123231sdsad.php"

如果是这样的话: 首先,您需要创建.htaccess文件

然后把它放在.htaccess文件中:

RewriteEngine On

RewriteRule ^http://my-website.de/download/(.*)$ http://my-website.de/download?link=$1 [QSA,L]