php用header()实现文件下载,下载的文件提示被破坏不能打开的解决办法

栏目: 编程语言 发布于: 2014-04-24 08:40:03

本站以前分享过一个文件下载的函数,具体文章连接地址如下:

PHP文件下载函数(代码)

最近一客户反映他们网站上所有的图片下载不了了,下载下来的图片都提示文件被破坏,直接导致打不开,作者测试了下发现确实有这个问题,仔细看了下源代码,发现问题的根源在fread这个函数,fread函数的第二个参数是设置读取最大的字节数,经试验发现fread函数单次最大能够读取的字节数是有限制的,仅为8192个字节,即8KB,对于超过这个大小的文件,如果要完整读取,则需要循环读取直至文件结尾。综合以上做了些改正,以下代码是休整之后的代码,经测试问题解决。

function download($file_url,$new_name=''){
	if(!isset($file_url)||trim($file_url)==''){
		return '500';
	}
	if(!file_exists($file_url)){//检查文件是否存在
		return '404';
	}
	$file_name=basename($file_url);
	$file_type=explode('.',$file_url);
	$file_type=$file_type[count($file_type)-1];
	$file_name=trim($new_name=='')?$file_name:urlencode($new_name).'.'.$file_type;
	//输入文件标签phpernote
	header("Content-type: application/octet-stream");
	header("Accept-Ranges: bytes");
	header("Accept-Length: ".filesize($file_url));
	header("Content-Disposition: attachment; filename=".$file_name);
	//输出文件内容
	@readfile($file_type);
}
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。
转载请注明:文章转载自 [http://www.php230.com]
本文标题:php用header()实现文件下载,下载的文件提示被破坏不能打开的解决办法
IT技术书籍推荐:
疯狂Android讲义(第3版)
疯狂Android讲义(第3版)
李刚 (作者)
移动互联网已经成为当今世界发展最快、市场潜力最大、前景最诱人的业务,而Android则是移动互联网上市场占有率最高的平台。 本书是《疯狂Android讲义》的第3版,本书基于最新的Android 5,并采用了Google推荐的IDE:Android Studio作为开发工具,书中每个案例、每个截图都全面升级到Android 5。本书全面介绍了Android应用开发的相关知识,全书内容覆盖了Android用户界面编程、Android四大组件、Android资源访问、图形/图像处理、事件处理机制、Android输入/输出处理、音频/视频多媒体应用开发、OpenGL与3D应用开发、网络通信编程、Android平台的Web Service、传感器应用开发、GPS应用开发、整合第三方Map服务等。
最新互联网资讯