PHP文件操作之PHP文件下载实例
PHP文件操作之PHP文件下载实例
在前面的一篇文章“PHP文件操作之PHP文件上传实例”中,说到了使用PHP实现文件上传的方法,今天就来说一说与上传相反的操作-使用PHP实例文件下载。文件下载可以说大家都会操作过,无论是FTP还是HTTP,他们使用的原理都是一样的:将文件存放到服务器上指定的位置,然后使用语言程序通过FTP协议或者HTTP协议来实现下载过程,当用点击下载链接即可实现文件下载。
本文要讲的PHP文件下载,就是一种基于HTTP协议的文件传输过程,也是PHP开发过程中,开发者一般都会使用到的一种文件操作过程。下面就开始今天的主题-如何使用PHP实现文件下载。
首先,在自己的本地PHP环境存放本地站点的根目录下新建一个名为download(下载)的目录,打开这个目录,新建一个存放下载文件的名为down的目录,然后再新建两个PHP文件download.php和downloadService.php,我的思路是将PHP文件下载这一过程封装在一个自定义函数(downloadService.php里面),然后在一个控制器(download.php)里面调用这个函数来实现下载过程。文件目录结构如下:
/download
/download/down/
/download/download.php
/download/downloadService.php
然后,就开始编写程序代码,分别如下:
一、自定义PHP文件下载函数downloadService.php
<?php
/*自定义下载函数,其中$file_name为下载文件名,$file_sub_dir为下载文件的子路径*/
function down_file($file_name,$file_sub_dir){
//PHP读取中文时需要对中文进行转码
$file_name=iconv("utf-8","gb2312",$file_name);
//使用绝对路径
$file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
//判断文件是否存在
if(!file_exists($file_path)){
echo "文件不存在!";
return;
}
//打开文件
$fp=fopen($file_path,"r");
//获取文件大小
$file_size=filesize($file_path);
if($file_size>10*1024*1024){
echo "<script language='javascript'>window.alert:'文件过大,不能下载!'</script>";
}
//返回的文件
header("Content-type: application/octet-stream");
//按照字节大小返回
header("Accept-Ranges: bytes");
//返回文件大小
header("Accept-Length: $file_size");
//客户端弹出的对对话框,对应的文件名
header("Content-Disposition: attachment; filename=".$file_name);
//向客户端回头数据
$buffer=1024;
//为了下载安全,我们最好做一个文件字节读取计数器$file_count
$file_count=0;
//这句话用于判断文件是否结束
while(!feof($fp) && ($file_size-$file_count>0) ){
$file_data=fread($fp,$buffer);
//统计读了多少字节
$file_count+=$buffer;
//把部分数据送给浏览器
echo $file_data;
}
//关闭文件
fclose($fp);
}
?>
二、响应用户请求控制器download.php
<?php
require_once 'downloadService.php';
//设置文件编码
header("content-type: text/html; charset:utf-8");
//接收要下载文件的名字
$file_name=$_REQUEST['filename'];
//调用自定义函数
down_file($file_name,"/download/down")
?>
以上就是PHP下载的程序部分,当然要实现文件下载,还得需要用户请求(这里是指通过GET请求),这里再在/download目录下新建一个用户请求界面index.php,其源代码如下:
<html>
<head>
<title>文件下载实例</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
<a href="download.php?filename=yoursfilename">点击下载</a><br><br/>
<a href="download.php?filename=yoursfilename">点击下载</a><br><br/>
</body>
</html>
至此PHP文件下载过程实例就说完了,欢迎试用,评论和留言。