大家好,我是新来的,请保持友好,不要因为我是初学者而生气。
为您介绍:
首先我生成了一个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,因此当用户想要再次使用此链接下载文件时,它不起作用。
有什么方法可以实现这种独特的文件下载功能,以便用户只看到密钥而不是路径?
总而言之:我想制作一个秘密的下载链接,用户只能使用一个链接。要再次下载该文件,即使他知道网址,也可以点击网站上的下载按钮
感谢您的帮助!我希望你能解决我的问题。感谢。
答案 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]