PHP实现文件下载

php怎么实现文件的下载?代码越简单越好。不需要特别功能,只要能用。

2种方法

1直接做个超链接,地址为文件的地址

<a href="文件地址">下载</a>


2流输出

<?php
$file=fopen('文件地址',"r");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".filesize('文件地址'));
header("Content-Disposition: attachment; filename=文件名称");
echo fread($file,filesize('文件地址'));
fclose($file);
?>

推荐第二种


因为第一种方法只能下载浏览器不能解析的文件,比如rar啊,脚本文件之类。如果文件是图片或者txt文档,就会直接在浏览器中打开


而第二种方法是直接输出的文件流,不存在上述问题

追问

第二种方法的是指文件所在目录(例:http://www.baidu.com/download/)还是文件路径(例:http://www.baidu.com/download/1.exe)?

追答

这里的文件地址指的是 服务器上的文件所在位置(包括文件名及后缀)
可以使用相对路径,也可以使用绝对路径,也可以使用网址远程访问

追问

Warning: fopen($fileadd) [function.fopen]: failed to open stream: No such file or directory in O:\htdocs\download.php on line 4

追答

地址问题,地址对了就没错了

最好加个file_exists()检验一下地址是否有效

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-19
php下载文件的流程:

我们向浏览器发送一个请求,访问服务器中的某个网页(如:download.php),服务器接受到该请求以后,运行该php文件 ,运行中就会把希望下载的文件(aa.rar)读入内存,但是如果文件较大,就要准备分成多段返回给客户端的(这样最可靠)。
需要在php代码中设置一次读取的字节数,比如在下面的代码中通过$buffer=1024设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)

如下:下载文件用的php文件,和放在同一个目录的下载文件aa.rar
download.php代码和解释
<?php
$file_name="aa.rar";//需要下载的文件
$file_name=iconv("utf-8","gb2312","$file_name");
$fp=fopen($file_name,"r+");//下载文件必须先要将文件打开,写入内存
if(!file_exists($file_name)){//判断文件是否存在
echo "文件不存在"; //如果不存在
exit(); //直接退出
} //如果存在,继续执行下载
$file_size=filesize("aa.rar");//判断文件大小
//返回的文件
Header("Content-type: application/octet-stream");
//按照字节格式返回
Header("Accept-Ranges: bytes");
//返回文件大小
Header("Accept-Length: ".$file_size);
//弹出客户端对话框,对应的文件名
Header("Content-Disposition: attachment; filename=".$file_name);
//防止服务器瞬时压力增大,分段读取
$buffer=1024;
while(!feof($fp)){
$file_data=fread($fp,$buffer);
echo $file_data;
}
//关闭文件
fclose($fp);
?>
第2个回答  2013-08-20
能表达清楚点吗?
是PHP去下载远程的东西还是?