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文件下载过程实例就说完了,欢迎试用,评论和留言。