php下载原理:用户向服务器端发送一个下载文件的请求,服务器端响应之后,在内存中打开,读取文件信息,关闭文件,基本是这个步骤的。
比如下载一个文件名为win.jpg的文件,在下载页面的代码中就需要先判断if(file_exists($文件名)),不存在的话提示文件不存在,存在的话就继续往下面执行,打开文件,用fopen($filename)函数打开文件,用filesize()函数判断一下文件大小。接下来的这段:
//返回文件(告诉浏览器)
header("Content-type:application/octet-stream");
//按照字节大小返回
header("Accept-Ranges:bytes");
//返回文件的大小
header("Accept-Length:$file_size");
//弹窗,对应的文件名
header("Content-Disposition:attachment;filename=".$file_name);
然后定义一个$buffer,就是每次读文件的大小,
while(!feof($fp)){
$fil= fread($fp,$buffer);
echo $fil;
}
feof函数时候判断是否到达文件结尾了,然后就用fread()函数开始读取数据,每次读取数据量为$buffer,这个$buffer一般是以字节为单位的,可以直接设置数字的。读完之后别忘了给浏览器返回结果。
最后用fclose()关闭文件。
中文乱码问题用iconv("utf-8","gb2312",$filename)解决。