2010-04-18 49 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