LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

PHP動(dòng)態(tài)下載鏈接的解決方案,隨機(jī)下載鏈接完美避免被盜鏈

admin
2023年10月30日 15:13 本文熱度 697

做網(wǎng)站的時(shí)候,有時(shí)候想要提供一些資源給用戶下載,但是往往別的網(wǎng)站直接復(fù)制本站的下載鏈接提供給他的用戶下載,而消耗自己服務(wù)器的資源。如何完美解決這個(gè)方法呢?那就是一次性下載鏈接,每次下載鏈接都不一樣,別人復(fù)制了你的下載鏈接也沒有用。如何實(shí)現(xiàn)這個(gè)功能呢?



方法一:使用session


假定123.zip是我們想要提供給用戶下載的文件資源,我們首先在文件介紹頁面生成一個(gè)隨機(jī)下載鏈接,比如我們的下載地址:https://www.wensha.info/  xiazai.php?code=(php隨機(jī)生成的一個(gè)字符串,該變量命名為$code);然后我們把隨機(jī)字符、時(shí)間和文件名稱都存入session中。


第一步:在資源介紹頁面把文件資源信息存入session


//設(shè)置時(shí)間和文件資源信息
session_start();
$_SESSION["$code"] = '123.zip';
$_SESSION["$code".'time'] = time();


當(dāng)用戶點(diǎn)擊https://www.wensha.info/  xiazai.php?code=$code這個(gè)鏈接的時(shí)候,只通過get方式傳遞了一個(gè)變量,那就是code。接下來我們就需要通過獲取code這個(gè)變量來解讀文件資源的信息了。


第二步:通過GET值讀取上一步存入的數(shù)據(jù)并把文件內(nèi)容提供給下載者


<?php
$code = $_GET['code'];
session_start;
$file = $_SESSION["$code"];
$time = $_SESSION["$code".'time'];
if(time() - $time >= 5 * 60){//如果生成鏈接的時(shí)間超過5分鐘
echo '該鏈接已經(jīng)失效';
exit;
}else{
// 檢查文件是否存在
if (file_exists($file)) {
    // 設(shè)置響應(yīng)頭,告訴瀏覽器該文件為下載文件
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=123.zip");
    // 將文件輸出給瀏覽器
    readfile($file);
    exit;
} else {
    // 文件不存在的處理邏輯
    echo "文件不存在";
    exit;
}
}
//清除SESSION數(shù)據(jù),如果你網(wǎng)站登錄使用的是SESSION,這里不建議你直接銷毀SESSION,而是用下面的方法把SESSION的相關(guān)數(shù)據(jù)清除。
$_SESSION["$code"] = '';
$_SESSION["$code".'time'] = '';
?>


方法二:使用臨時(shí)文件


這個(gè)針對(duì)大文件效率比方法一要快。思路是使用php把123.zip復(fù)制到臨時(shí)目錄,然后提供給用戶下載。最后定時(shí)清理臨時(shí)文件即可。


第一步:復(fù)制源文件并重新命名


我們將文件123.zip復(fù)制到cache/data目錄并使用隨機(jī)名稱重新命名:

$sourceFile = '123.zip'; // 源文件路徑
$destinationDirectory = 'cache/data/'; // 目標(biāo)文件夾路徑
// 生成隨機(jī)文件名
$randomName = generateRandomString(10); // 使用自定義的隨機(jī)字符串生成函數(shù)
// 目標(biāo)文件路徑
$destinationFile = $destinationDirectory . $randomName . '.zip';
// 復(fù)制文件
if (copy($sourceFile, $destinationFile)) {
    echo "文件復(fù)制成功!";
} else {
    echo "文件復(fù)制失敗!";
}
// 生成指定長度的隨機(jī)字符串
function generateRandomString($length) {
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}
//下載鏈接
$fileurl = 'https://www.wensha.info/'.$destinationFile;


當(dāng)用戶點(diǎn)擊$fileurl,則把臨時(shí)文件提供給用戶,但是這里需要注意,還需要寫一個(gè)文件來定期清理臨時(shí)目錄里的臨時(shí)文件。


第二步:清理臨時(shí)文件


要讀取cache/data目錄下所有文件的時(shí)間,并刪除所有時(shí)間小于1小時(shí)前的文件,可以使用以下代碼:


$directory = 'cache/data/'; // 目錄路徑
// 獲取目錄中的所有文件
$files = scandir($directory);
// 遍歷文件
foreach ($files as $file) {
    if ($file !== '.' && $file !== '..') {
        $filePath = $directory . $file;
        // 獲取文件修改時(shí)間
        $fileTime = filemtime($filePath);
        // 判斷文件修改時(shí)間是否小于1小時(shí)前
        if ($fileTime < (time() - 3600)) {
            // 刪除文件
            unlink($filePath);
            echo "已刪除文件:$file<br>";
        }
    }
}


以上代碼中,我們首先通過scandir()函數(shù)獲取指定目錄下的所有文件。然后使用循環(huán)遍歷文件列表,并排除`.`和`..`目錄。在循環(huán)中,我們獲取每個(gè)文件的修改時(shí)間通過filemtime()函數(shù),并將其與當(dāng)前時(shí)間相比較。如果文件的修改時(shí)間早于1小時(shí)前(時(shí)間戳小于`time() - 3600`),則使用unlink()函數(shù)刪除該文件。


動(dòng)態(tài)URL下載鏈接的方式千萬種,這里只介紹了最容易掌握的兩種方法。本文主要是為你提供實(shí)現(xiàn)思路和方法,文章中的代碼未經(jīng)過測(cè)試,可能存在語法錯(cuò)誤,還需仔細(xì)檢測(cè)。


該文章在 2023/10/30 15:14:00 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
欧美日韩中文字幕久久久不卡 | 亚洲国产一区二区三区 | 日韩欧美中文宇幕无敌色 | 中文乱码在线播放亚洲 | 午夜性色福利视频你懂的 | 久久6热热热综合精品 |