七空幻音LOGO

七空幻音

使用PHP让用户在指定页面下载文件2016-05-26 19:37:44

一般各大网站提供下载的地方,要么是自己网站服务器,要么百度云、360云等。但是如果自己想放自己的服务器上怎么办呢?一般很正常的就是放在web服务器目录下,用a标签去链接,就能直接下载了,但是别人就可以拿到这个链接自己到处乱发怎么办呢?并且只允许别人下载页面只能够在我自己的网站上面下载呢?

我之前提供下载的地方是 dl.acgxt.com 加上一些参数,但是要想拿到真实的下载地址呢?拿到也下不了...我在下载页面上设置了session才能够下载,首先我们得做一个php的下载文件(download.php),然后使用ajax去获取session,然后在去访问download.php返回文件即可完成。

红色框里表示的是下载文件访问的路径

由于设置了session验证,所以如果直接去访问这个地址就会给出一个错误。

HTML


<input type="text" id="fileName">
<input type="button" id="download" value="下载">
<script type="text/javascript" src="https://static.acgxt.com/jquery.js"></script>
<script type="text/javascript">
  $(function(){
    $("#download").click(function(){
      var fileName = $("#fileName").val();
      $.ajax({
        url:"download.php",
        type:"get",
        dataType:"json",
        data:{
          file:fileName
        },
        success:function(data){
          if(data['error']=='0'){
            window.location.href="download.php?dl="+fileName
          }else{
            alert(data['meta']);
          }
        }
      })
    })
  })
</script>

 download.php



<?php
session_start();//开启session
$file_dir = "download/";//文件储存目录

if (isset($_GET['dl'])) {
    global $file_dir;
    $fileName = $_GET['dl'];

    if(isset($_SESSION[$fileName])==true){
      $file_name = mb_str($fileName);//转换编码
      $file = $file_dir . $file_name;//文件所在路径
      if (file_exists($file)) {//判断文件是否存在
          $fp = fopen($file, "r");//以只读的方式打开文件
          $file_size = filesize($file);//获取文件大小
          //发送下载需要的https头文件
          header("Content-type: application/octet-stream");
          header("Accept-Ranges: bytes");
          header("Accept-Length: " . $file_size);//显示文件大小
          header("Content-Disposition: attachment; filename=" . $file_name);//告知用户文件名称
          echo fread($fp, $file_size);//读取输出文件
          fclose($fp);//关闭文件
          unset($_SESSION[$fileName]);//最后删除session
          exit();//结束
      }else{
          echo json_encode(array(
            'error'=>1,
            'meta'=>'文件不存在,无法下载'
          ));
      }
    }else{
      //当别人不是从本页面下载的时候
      echo json_encode(array(
        'error'=>1
      ));
    }


}
//首先在本页面提交下载,设置session
if(isset($_GET['file'])){
  global $file_dir;
  $fileName = $_GET['file'];
  $file_name = mb_str($fileName);//转换编码
  $file = $file_dir . $file_name;//文件所在路径
  if (file_exists($file)) {//判断文件是否存在
    $_SESSION[$fileName] = true;
    echo json_encode(array(
      'error'=>0
    ));
  }else{
    echo json_encode(array(
      'error'=>1,
      'meta'=>"文件不存在,无法下载"
    ));
  }
}

//由于文件名称如果是中文会乱码,随意将gbk转换为utf-8编码
function mb_str($string){
    return mb_convert_encoding($string,"GBK","UTF-8");
}
?>




Demo下载地址:

【七空幻音】使用PHP让用户在指定页面下载文件


1条评论登录后可见

用户头像
幻音い
咕了咕了咕了....

文章:125

收藏:3

查看更多
详细图片
载入中...