PHP如何防止迅雷下載的?本文主要介紹了詳解PHP防止盜鏈防止迅雷下載的方法,並為大家做個參考。希望對大家有幫助。
防止盜鏈:
原則:當伺服器要我們下載文件的時候,我們會拿到一個鏈接,然後我們透過這個連結找到這個文件,然後將它下載下來。那麼也就是說這個連結必須要有的,那麼如何防止盜鏈呢?那就是給你的連結並不是真正的文件連結了。這一點很容易想到,那麼不給你真正的連結又怎樣讓你下載檔案呢?
我們在用php做網頁的時候,總是會把php程式碼穿插在HTML程式碼中間,然後用php去產生剩下的程式碼,然後傳給客戶端,也就是說客戶端會接受到我們php腳本運行的結果。也就是說:如果我的php腳本運行的結果就是你要下載的檔案。這樣我們就實現了文件防盜鏈。就是說你能得到的連結就是這個php文件,然後再由這個百變php檔案變成你想要的檔案來供你下載。
程式碼如下:
$FileAddress : 文件的相对路径。 $DownloadName : 文件下载到客户端的名字。 if(file_exists($FileAddress) && $file=fopen($FileAddress,'r')) { //首先要判断文件是否存在,如果文件跟本不存在的话,后边的代码也是白费。 Header('content-type:application/octet-stream'); //声明文件类型,这里是为了让客户端下载它,而不是打开它,所以声明为未知二进制文件。否则客户端会根据其文件类型在线打开它。 Header('content-Length:'.filesize($FileAddress)); //声明文件的大小,告诉客户端这个文件的大小,否则客户端下载的时候看不到进度。 Header('content-disposition:attachment;filename='.$DownloadName); //声明文件名,这里就是告诉客户端它要下载的文件的名字,否则名字就会是你php文件的名字。 echo fread($file,filesize($FileAddress)); //这里就是将加载的文件echo出来,因此这个php文件不能出现其他任何的文字,就是说这里若是出现了任何其他的输出的话都会输出到客户端下载的文件里。 fclose($file); //最后关闭句柄。 }
上邊這些程式碼就成功的勝任了防止盜鏈的任務,只需要定義那兩個變數就可以。那兩個變數可以透過GET來獲取,例如我們將檔案實際連結與它的編號在資料庫中做一個映射,我們只需要GET到一個檔案ID即可對檔案進行下載,保證了我們真實檔案位址的安全。當然也可以是加密文件真實連結之類的,總之就是不要講真實連結再放到客戶端可以看到的地方就好。
防止迅雷下載
其實透過上邊的程式碼,我們只能做到連結的隱藏,並不能防止客戶端用迅雷等工具來下載。那麼如何做到防止用迅雷等工具下載它呢?
正如我之前所說我們可以透過各種途徑來讓php檔案得到這個檔案的路徑,那麼,我們只要不要將這些資訊加在連結裡邊就好了。例如:可以透過POST來傳輸檔案的ID,可以透過session來傳輸檔案的ID。
這就是我所說的:花式授權下載。
1.我們可以在下載的前導頁寫入客戶端session,來儲存其授權碼,將檔案ID也儲存進去,然後再在下載的php裡加入驗證session的程式碼,這樣就算客戶端將連接輸入迅雷下載也是沒有用的。
2.我們可以在下載的前導頁加入一個隱藏的表單,用POST提交給實現下載功能的php,這樣也能達到防止第三方下載工具下載的目的。
總之這樣的方法很多,上面兩種方法提供參考,主要的想法就是將要下載檔案的資訊和連結分開來,這樣就可以達到只憑一個連結無法下載檔案的目的。
相關推薦:
以上是詳解PHP如何防止迅雷下載的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!