【PHP】防止視頻資源被下載的解決辦法


假設域名:www.test.com

詳情控制器

// 詳情頁
public function detail(){
    $_SESSION['play_token'] = md5("laofan666"); //做一個token 用於失效方案
    return View::fetch('video/detail');
}

詳情頁

<video controls="controls" autoplay="autoplay">
<source type="video/ogg" src="http://www.test.com/video/paly?id=1" />
 Your browser does not support the video tag.
</video>

獲取播放資源

    //處理播放資源
    public function paly(){
        $request_data = Request::param();
        //數據庫存放的資源id
        $vid = (int)$request_data['id'];   
        //通過vid 獲取 數據庫存放的真實資源地址
        $data_mes = Db::name('video')->field('video_url')->where('id',$vid)->find(); 
        if($_SESSION["play_token"]){  
            //刪除token,保證每次只能播放一次
            //此處能做的東西就很多了,可以參考下方建議
            unset($_SESSION["play_token"]); 
        }
        //頁面直接輸出視頻
        $filePath=$data_mes['video_url'];
        ini_set('memory_limit', '512M');
        header("Pragma: public");
        header("Expires: 0");
        header("Content-Type: application/octet-stream"); //文件mime類型
        ob_clean();
        flush();
        @readfile($filePath);
    }


頁面鏈接只需要訪問 詳情控制器,就可以看到效果

www.test.com/video/detail/1.html

關於token設計

  • 用戶登陸觀看, 用戶id + 視頻id + 失效時間,存放一條記錄,校驗token

  • 無需登陸觀看,ip地址&瀏覽器等信息 + 視頻id + 失效時間, 存放一條記錄 校驗token

后話:代碼預防下載只能暫時性的處理,要是用戶錄屏呢,一幀一幀的截取呢,手動滑稽.jpg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM