PHP文件下载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP文件下载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5768字,纯文字阅读大概需要9分钟。
内容图文
![PHP文件下载](/upload/InfoBanner/zyjiaocheng/1252/2ee0a4469ab54f699da86c4aa872dac9.jpg)
- 文件下载
1 <?php 2$fileName="tony.jpeg"; 3//判断文件存在否,如果不存在,程序中断执行 4if(!file_exists($fileName)){ 5die("文件不存在"); 6 } 7//打开文件 8$fp=fopen($fileName,"r"); 9//获取下载文件大小10$fileSize=filesize($fileName); 11//下载文件需要的头12header("Content-type: application/octet-stream"); 13header("Accept-Ranges: bytes"); 14header("Accept-Length: $fileSize"); 15//客户端弹出对话框,对应的文件名16header("Content-Disposition: attachment; filename=".$fileName); 17//判断文件是否结束,回送数据18while(!feof($fp)){ 19$contents=fread($fp,$fileSize); 20echo$contents; 21 } 22//关闭文件23fclose($fp); 24 ?>
IE8运行结果如下:
- 中文名文件下载,读取字节计数器
当文件名为中文时,会读取不到相应的文件,提示文件不存在,所以我们用iconv函数把utf-8转码成gb2312
1 <?php 2//文件名为中文时,需要转码成gb2312显示 3$fileName="老泪纵横.jpg"; 4$fileName=iconv("utf-8","gb2312",$fileName); 5//判断文件存在否,如果不存在,程序中断执行 6if(!file_exists($fileName)){ 7die("文件不存在"); 8 } 9//打开文件10$fp=fopen($fileName,"r"); 11//获取下载文件大小12$fileSize=filesize($fileName); 13//下载文件需要的头14header("Content-type: application/octet-stream"); 15header("Accept-Ranges: bytes"); 16header("Accept-Length: $fileSize"); 17//客户端弹出对话框,对应的文件名18header("Content-Disposition: attachment; filename=".$fileName); 19//判断文件是否结束,回送数据 20 //为了安全,我们做一个文件读取字节计数器21$buffer=1024; 22$fileCount=0; 23while(!feof($fp)&&($fileSize-$fileCount)>0){ 24$contents=fread($fp,$buffer); 25//统计读了多少个字节26$fileCount+=$buffer; 27//把部分数据回送给浏览器28echo$contents; 29 } 30//关闭文件31fclose($fp); 32 ?>
IE8运行结果如下:
- 当下载文件与该php文件不在同一文件夹下时,用相对路径表示如下:
1 <?php 2//文件名为中文时,需要转码成gb2312显示 3$fileName="老泪纵横.jpg"; 4$fileName=iconv("utf-8","gb2312",$fileName); 5//相对路径表示文件位置 6$filePath="./pictures/".$fileName; 7//判断文件存在否,如果不存在,程序中断执行 8if(!file_exists($filePath)){ 9die("文件不存在"); 10 } 11//打开文件12$fp=fopen($filePath,"r"); 13//获取下载文件大小14$fileSize=filesize($filePath); 15//下载文件需要的头16header("Content-type: application/octet-stream"); 17header("Accept-Ranges: bytes"); 18header("Accept-Length: $fileSize"); 19//客户端弹出对话框,对应的文件名20header("Content-Disposition: attachment; filename=".$fileName); 21//判断文件是否结束,回送数据 22 //为了安全,我们做一个文件读取字节计数器23$buffer=1024; 24$fileCount=0; 25while(!feof($fp)&&($fileSize-$fileCount)>0){ 26$contents=fread($fp,$buffer); 27//统计读了多少个字节28$fileCount+=$buffer; 29//把部分数据回送给浏览器30echo$contents; 31 } 32//关闭文件33fclose($fp); 34 ?>
IE8运行结果如下:
- 用绝对路径表示如下:
1 // 绝对路径表示文件位置 2 $filePath=$SERVER[‘DOCUMENT_ROOT‘]."./pictures/".$fileName;
结果同上
- 用函数把上述程序封装
1 <?php 2//对函数参数的说明: 3 //$fileName 文件名,格式为 "老泪纵横.jpg" 4 //$fileSubDir 下载文件的子路径,格式为 "./pictures/" 5function fileDown($fileName,$fileSubDir){ 6//文件名为中文时,需要转码成gb2312显示 7$fileName=iconv("utf-8","gb2312",$fileName); 8//相对路径表示文件位置 9 //$filePath="./pictures/".$fileName; 10 //绝对路径表示文件位置11$filePath=$SERVER[‘DOCUMENT_ROOT‘].$fileSubDir.$fileName; 12//判断文件存在否,如果不存在,程序中断执行13if(!file_exists($filePath)){ 14die("文件不存在"); 15 } 16//打开文件17$fp=fopen($filePath,"r"); 18//获取下载文件大小19$fileSize=filesize($filePath); 20//下载文件需要的头21header("Content-type: application/octet-stream"); 22header("Accept-Ranges: bytes"); 23header("Accept-Length: $fileSize"); 24//客户端弹出对话框,对应的文件名25header("Content-Disposition: attachment; filename=".$fileName); 26//判断文件是否结束,回送数据 27 //为了安全,我们做一个文件读取字节计数器28$buffer=1024; 29$fileCount=0; 30while(!feof($fp)&&($fileSize-$fileCount)>0){ 31$contents=fread($fp,$buffer); 32//统计读了多少个字节33$fileCount+=$buffer; 34//把部分数据回送给浏览器35echo$contents; 36 } 37//关闭文件38fclose($fp); 39 } 40//调用函数 41 //fileDown("老泪纵横.jpg","./pictures/");42 fileDown("tony.jpeg",""); 43 ?>
- 页面上有多个文件可以选择下载
fileDownList.php 显示可以下载的文件:
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <title>可下载文件列表</title> 5 </head> 6 <body> 7 <?php 8//避免“点击下载”四个字乱码 9header("Content-Type:text/html;charset=utf-8"); 10 ?> 11 <a href="fileDownProcess.php?fileName=hungry.jpg">点击下载</a><img src="pictures/hungry.jpg" width="70px" /><br/><br/> 12 <a href="fileDownProcess.php?fileName=tony.jpeg">点击下载</a><img src="pictures/tony.jpeg" width="70px" /><br/><br/> 13 <a href="fileDownProcess.php?fileName=老泪纵横.jpg">点击下载</a><img src="pictures/老泪纵横.jpg" width="70px" /><br/><br/> 14 <a href="fileDownProcess.php?fileName=hot.jpg">点击下载</a><img src="pictures/hot.jpg" width="70px" /><br/><br/> 15 <a href="fileDownProcess.php?fileName=smile.jpg">点击下载</a><img src="pictures/smile.jpg" width="70px" /><br/><br/> 16 </body> 17 </html>
fileDownProcess.php 完成文件下载:
1 <?php 2require "fileDownService.php"; 3header("Content-Type:text/html;charset=utf-8"); 4//接收要下载文件的名字5$fileName=$_REQUEST[‘fileName‘]; 6 fileDown($fileName,"./pictures/"); 7 ?>
fileDownService.php 完成下载的函数封装:
1 <?php 2//对函数参数的说明: 3 //$fileName 文件名,格式为 "老泪纵横.jpg" 4 //$fileSubDir 下载文件的子路径,格式为 "./pictures/" 5function fileDown($fileName,$fileSubDir){ 6//文件名为中文时,需要转码成gb2312显示 7$fileName=iconv("utf-8","gb2312",$fileName); 8//相对路径表示文件位置 9 //$filePath="./pictures/".$fileName; 10 //绝对路径表示文件位置11$filePath=$SERVER[‘DOCUMENT_ROOT‘].$fileSubDir.$fileName; 12//判断文件存在否,如果不存在,程序中断执行13if(!file_exists($filePath)){ 14die("文件不存在"); 15 } 16//打开文件17$fp=fopen($filePath,"r"); 18//获取下载文件大小19$fileSize=filesize($filePath); 20//下载文件需要的头21header("Content-type: application/octet-stream"); 22header("Accept-Ranges: bytes"); 23header("Accept-Length: $fileSize"); 24//客户端弹出对话框,对应的文件名25header("Content-Disposition: attachment; filename=".$fileName); 26//判断文件是否结束,回送数据 27 //为了安全,我们做一个文件读取字节计数器28$buffer=1024; 29$fileCount=0; 30while(!feof($fp)&&($fileSize-$fileCount)>0){ 31$contents=fread($fp,$buffer); 32//统计读了多少个字节33$fileCount+=$buffer; 34//把部分数据回送给浏览器35echo$contents; 36 } 37//关闭文件38fclose($fp); 39 } 40 ?>
结果如下:
鼠标点击“点击下载”,弹出如下框:
点击保存,会弹出保存路径可以选择,如下:
原文:http://www.cnblogs.com/seaBiscuit0922/p/5901871.html
内容总结
以上是互联网集市为您收集整理的PHP文件下载全部内容,希望文章能够帮你解决PHP文件下载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。