首頁 後端開發 php教程 詳解PHP如何防止迅雷下載的方法

詳解PHP如何防止迅雷下載的方法

Jan 03, 2018 am 11:13 AM
php 下載 迅雷

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 檔案本身操作

#簡單介紹PHP 檔案鎖定與進程鎖定

#########簡單介紹PHP 檔案鎖定與進程鎖定######## #

以上是詳解PHP如何防止迅雷下載的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles