php文件下载(解决文件下载后多几个字节的问题)

php文件下载比较常见,网上的资料比较多,在此不再强调怎么去实现(因为也是网上看的)。下面主要说明的是下载代码的注意点。
php下载文件主要是把文件以字节流直接输出,也就是echo fread($file, filesize($file_name));,这里要注意的是如果你在代码之前(或之后)有输出,也可能被写入下载的文件中,解决的方法是使用ob_start();和ob_end_clean();来清除前面的输出,后面的输出直接使用@fclose($file);exit(0);来解决。
代码如下:

ob_start();
$file_name = iconv("utf-8","gb2312",$file_name);
if (!is_file($file_name)){
	echo "url error!";
} else {
	$ua = $_SERVER["HTTP_USER_AGENT"];
	if (preg_match("/MSIE/", $ua)) {
		$encoded_filename = urlencode(basename($file_name));
		$encoded_filename = str_replace("+", "%20", $encoded_filename);
		$con_dis = 'Content-Disposition: attachment; filename="' . $encoded_filename . '"';
	} else if (preg_match("/Firefox/", $ua)) {
		$con_dis = 'Content-Disposition: attachment; filename*="utf8\'\'' . basename($file_name) . '"';
	} else {
		$con_dis = 'Content-Disposition: attachment; filename="' . basename($file_name) . '"';
	}
	$file = fopen($file_name, "r"); 
    //输入文件标签  
	ob_end_clean();Header("Content-type: application/octet-stream");Header("Accept-Ranges: bytes");Header("Accept-Length: ".filesize($file_name));Header($con_dis);
    //输出文件内容   
    //读取文件内容并直接输出到浏览器 
    echo fread($file, filesize($file_name));@fclose($file);
    exit(0);
}  
未经允许禁止转载~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇