zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    element-ui upload 上传图片之前压缩
    字符串截取substring放法传参不同返回不同
    vue中对于图片是否正常加载的思考
    前端图片合成并下载
    vue中图相对路径引用本地图片
    js计算精度
    vue-cli定义全局过滤器
    js加减乘除运算丢失精度 前端计算金额带小数点精度丢失问题
    鼠标样式大全
    js两小时倒计时,剩余时间倒计时,倒计时
  • 原文地址:https://www.cnblogs.com/richerdyoung/p/12710466.html
Copyright © 2011-2022 走看看