狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

PHP動態下載鏈接的解決方案,隨機下載鏈接完美避免被盜鏈

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

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



方法一:使用session


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


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


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


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


第二步:通過GET值讀取上一步存入的數據并把文件內容提供給下載者


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


方法二:使用臨時文件


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


第一步:復制源文件并重新命名


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

$sourceFile = '123.zip'; // 源文件路徑
$destinationDirectory = 'cache/data/'; // 目標文件夾路徑
// 生成隨機文件名
$randomName = generateRandomString(10); // 使用自定義的隨機字符串生成函數
// 目標文件路徑
$destinationFile = $destinationDirectory . $randomName . '.zip';
// 復制文件
if (copy($sourceFile, $destinationFile)) {
    echo "文件復制成功!";
} else {
    echo "文件復制失敗!";
}
// 生成指定長度的隨機字符串
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;


當用戶點擊$fileurl,則把臨時文件提供給用戶,但是這里需要注意,還需要寫一個文件來定期清理臨時目錄里的臨時文件。


第二步:清理臨時文件


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


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


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


動態URL下載鏈接的方式千萬種,這里只介紹了最容易掌握的兩種方法。本文主要是為你提供實現思路和方法,文章中的代碼未經過測試,可能存在語法錯誤,還需仔細檢測。


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