2010-04-18 48 views
2

我正在寻找某种下载身份验证。我要给用户一个链接到一个文件,我想确保只有那个人只会得到它一次。没有建立数据库有没有简单的解决方案?如何设置下载验证?

更妙的是:如果可能有一个加密的网页链接,可以让您从我的FTP服务器上下载一个文件一次,之后链接变得无效。

回答

2

您可以使用简单的PHP脚本。这个脚本在浏览器上的GET文件中反复调用inputet。 执行完毕后,您可以将此文件重命名为随机字符串。 这只有第一人下载这个文件。 您的链接得到这样的一些。是www.domain.tld/DIR/script.php的?文件=。在/ usr/123.tar.gz。 您可以在文件名的base64加密过,在此选项中您的链接是www.domain.tld/DIR/script.php的文件= Li91c3IvMTIzLnRhci5neg ==

无脚本的base64:

<?php 
$file = $_GET['file']; 

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, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    rename($file, "secret_new_filename"); 
    exit; 
} 
else 
{ 
    echo 'File don\'t exist'; 
} 
?> 

而且使用Base64 :

<?php 
$file = base64_decode($_GET['file']); 

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, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    rename($file, "secret_new_filename"); 
    exit; 
} 
else 
{ 
    echo 'File don\'t exist'; 
} 
?> 
+0

这是一个非常好的主意Svisstack。不幸的是,我不太了解PHP。有没有一个脚本可以做到这一点? – 2010-04-18 22:12:25

+0

我写这个剧本,给我一点时间。 – Svisstack 2010-04-18 22:13:18

+0

非常感谢! /尊重! – 2010-04-18 22:19:53