php使用http请求头实现文件下载
?众所周知php对http协议的依赖特别强,像java或者asp.net在某些情况下可以不依赖http例如asp.net的winform,对php来说文件下载可以使用http的请求头加上php的IO就可以实现了 1.先来看下下载所要用的的请求头 ? header("Content-type:application/octet-stream"); header("Accept-Ranges:bytes"); header("Accept-Length:".$file_Size); header("Content-Disposition: attachment; filename=".$filename);
? ? 2.php的文件操作出现的比较早,文件名是中文的时候需要注意转码 ? $filename=iconv("UTF-8","GB2312",$filename);
? ? //判断路径是否存在 if(!file_exists($filepath)){ echo "文件不存在"; return; } $fp=fopen($filepath,"r"); //取得文件大小 $file_Size=filesize($filepath); header("Content-type:application/octet-stream"); header("Accept-Ranges:bytes"); header("Accept-Length:".$file_Size); header("Content-Disposition: attachment; filename=".$filename); $buffer=1024; $buffer_count=0; while(!feof($fp)&&$file_Size-$buffer_count>0){ $data=fread($fp,$buffer); $buffer_count+=$buffer; echo $data; } fclose($fp);
? ? 3.上面的代码有的时候不好使,可以清空(擦掉)输出缓冲区,使用下面的代码即可 ? ob_clean();
? 下载之后文件也没有任何的问题 ? 下面是全部代码 ? <?php function downloadFile($name){ ob_clean(); $filename=$name; $filename=iconv("UTF-8",$filename); $filepath="E:otherphpdownloaddownload".$filename; //判断路径是否存在 if(!file_exists($filepath)){ echo "文件不存在"; return; } $fp=fopen($filepath,$buffer); $buffer_count+=$buffer; echo $data; } fclose($fp); } downloadFile("桌面截图.png"); ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |