博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】通常来说在 web 网页上 , 下载文件的时候,如果浏览器不能识别的文件,浏览器就会自动去识别,而我们想实现无论是什么格式,无论浏览器是否识别,都能够有效的下载该文件。
本文给出一个完整例子用于下载 docx , jpg , mp4 , txt , html ,xlsx , zip , php , gif , pptx , pdf 等等各格式的文件通用版本代码,完整如下:
// 下载文件名(在当前目录下)
$file = "中文.txt";
// 文件名称存在中文的时候,需要进行编码转换
// 即将 utf-8 编码转成 gb2312 编码
$file = iconv('UTF-8','GB2312',$file);
// 任意的二进制数据 , 不特指下载的文件类型,这样可以下载各类型格式的文件
// 若指定某种格式,可以将其进行修改
header('content-type:application/octet-stream');
// 告诉浏览器通过附件形式来处理文件
header('content-disposition:attachment;filename='.$file);
header('content-length:'.filesize($file)); // 文件大小
// 输出文件
echo file_get_contents($file);
另外给出一个小提示,网上很多的代码都是,在 "filename=" 的时候会用到 basename():
header('content-disposition:attachment;filename='.basename($file));
然而当 $file = "中文.txt" 是中文的时候,basename() 返回的是空,这个是一个 PHP 内置函数 basename() 的一个不足,最好的办法就不用这个函数来获取文件名。可以用当前时间、或时间戳、随机数来命名就可以。
这个文件是 basename() 函数不能够获取中文文件名的问题,这个问题以后有机会的时候再处理。
版权归 马富天个人博客 所有
本文标题:《PHP 下载文件【通用版本】》
本文链接地址:http://www.mafutian.com/405.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
评论审核未开启 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||