使用PHP让用户在指定页面下载文件
- 2016-05-26 11:37:44
- 幻音い
- 9039
温馨提示: 这篇文章于3102天前编写,现在可能不再适用或落后.
一般各大网站提供下载的地方,要么是自己网站服务器,要么百度云、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下载地址:
阁下需要登录后才可以查看评论哦~