咱们经常经过网页下载各类各样的文件,究竟是怎样实现地呢?本文从php的角度,结合http相关内容对文件下载作出相关讨论。php
通常来讲,经过超连接的方式能够直接下载文件。html
<a href='要下载的文件'>点击下载</a>
这一招能够应对不少格式的文件如.exe,.rar等格式,可是应对图片格式,html,txt等类型的文件,点击连接只会直接显示在浏览器上。那么如何应对这种状况呢?这时候就须要php出场了。编程
在我有限的php编程经历中,遇到过两种php下载文件的形式。总体上都是利用经过设置响应的header 来实现文件下载。原理上没有本质的不一样。浏览器
第一种:缓存
$file_name='文件名'; header ( 'Content-Disposition: attachment; filename=' . basename ( $file_name )); header ( 'Content-Length: '.filesize ( $file_name )); readfile ( $file_name );
其中$filename设置的是下载文件的名称。 经过readfile()读入一个文件而且写入到输出缓存。app
第二种:spa
$file_name='要下载的文件名'; $fp=fopen($file_name,"r+"); $file_size=filesize($file_name); //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);
这种方式更加详细描述了下载文件的过程。code