如何设置下载验证?

时间:2010-04-18 22:02:53

标签: authentication url download

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

更好的是:如果可以使用加密的网络链接,只允许您从我的FTP服务器下载一次文件,之后链接就会失效。

1 个答案:

答案 0 :(得分:2)

您可以使用简单的PHP脚本。这个脚本在浏览器的GET文件中重新输入inputet。 执行完毕后,您可以将此文件重命名为随机字符串。 这只是第一个人下载这个文件。 你的链接有点像这样。是www.domain.tld / DIR / script.php的?文件=。在/ usr / 123.tar.gz。 您也可以在base64中加密文件名,在此选项中您的链接是www.domain.tld / dir / script.php?file = 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';
}
?>