2014-11-06 121 views
0

時如何加密的URL我有這樣的代碼:PHP jQuery的下載文件

$(li.AandCattachment.a download).click(function() { 
$('#down').val($(this()); 

location.href('path/to/file?=' + $('#down').val()); 

} 

,但我需要這樣,這將是固定的URL加密,它不能被其他用戶複製並看到所有通過複製文件的URL和逐個更改網址的文件..

你能幫助我嗎?

回答

0

要實現不會只涉及客戶端代碼,但是服務器端代碼太什麼..

我可不是給你100%的解決方案,你將不得不做一些額外的工作(你會需要一種機制來驗證我自己可以不知道你是怎麼驗證的用戶)無法猜測的URL,但是這將指向你的方式:

做一個PHP文件來處理文件下載這樣

$crypted_url = $_GET["url_to_file_encripted_somehow"]; 

$file_path = get_file_path_from_crypted_url($crypted_url); 

if ($file_path === false){ 
    include "403.html"; 
    die; 
} 

$filename = "whatever"; 

header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=$filename.".pathinfo($file_path, PATHINFO_EXTENSION)); 
echo readfile($documento->link_archivo()); 

如果你解釋機制,我可能會有更多的幫助您想使用sm來驗證用戶。

1

您可以將這些文件放在webroot之外,這樣它們就不能直接使用,然後通過php提供。在這個例子中,我使用的關聯數組映射「隨機」字符串的實際文件,使文件名不能簡單地猜測:

//download.php 
$pathmap=[ 
    'hkd654gk'=>'../file1.jpg', 
    'k735hs87'=>'../file2.jpg', 
    'qwcv13v5'=>'../file3.jpg', 
    ]; 

$securepath = isset($_GET['path'])?$_GET['path']:''; 
if(!isset($pathmap[$securepath])) 
    die('file not found'); 
header('Content-Type: image/jpeg'); 
readfile($pathmap[$securepath]); 

要訪問文件1,網址是:

example.com/download.php?path=hkd654gk