php实现文件下载列表,php实现文件下载

近期搞了一个安卓的客户端,想把它挂到站点上提供下载,整理实现思路如下:

(1).浏览器发送一个请求,请求访问服务器中的某个网页(如:down.php)

(2).运行该文件的时候,必然要把将要被下载的文件读入内存当中,通过fopen()函数完成该动作

(3).从内存当中读取文件,通过fread()函数完成该动作

(4).把读到的内容输出到客户端

需要注意的是,如果文件较大,文件应该是被分成多段返回给客户端的,并不是等文件在服务端全部读取完毕后,一次性返回给客户端,因为这样子会增加服务器的负荷。

所以我们需要在php代码中设置一次读取的字节数,比如我在下面的代码中通过$buffer=1024设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)

具体实现如下,我把代码贴出来,代码都做了详细的注释,保证能看明白

public function index()

{

$file_name="Kl博客.apk";

//用以解决中文不能显示出来的问题

$file_name=iconv("utf-8","gb2312",$file_name);

$file_sub_path=$_SERVER['DOCUMENT_ROOT']./admin.php?s=."/Uploads/DownFile/";

$file_path=$file_sub_path.$file_name; //完整的文件路径

//首先要判断给定的文件存在与否

if(!file_exists($file_path)){

echo "来晚了,文件不存在";

}

else

{

$fp=fopen($file_path,"r"); //以只读的方式打开文件

$file_size=filesize($file_path);//得到文件大小

//下载文件需要用到的头

Header("Content-type: application/octet-stream"); //告诉浏览器这是一个文件流格式的文件

Header("Accept-Ranges: bytes"); //告诉客户端浏览器返回的文件大小是按照字节进行计算的

Header("Content-length:".$file_size); //告诉浏览器返回的文件大小

Header("Content-Disposition: attachment; filename=".$file_name); //告诉浏览器文件的名称

$buffer=1024; //设置缓冲区大小

$file_count=0; //读取到的文件大小变量

//向浏览器返回数据

while(!feof($fp) && $file_count

$file_con=fread($fp,$buffer); //读到一个缓冲区文件的大小

$file_count+=$buffer; //累积读到的文件大小

echo $file_con; //直接向浏览器输出

}

//echo fread($fp, $file_size);//小文件可以直接一次性读完

fclose($fp); //可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区

}

}

本文同步分享在 博客“kailing”(other)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值