0

我的帖子

个人中心

设置

  发新话题
自己按照书上敲的代码,能下载英文文件,但下载中文文件时,文件会比正常的大几k,用word打不开,用editplus打开发现内容上部分是网页HTML的代码,下面应该是中文内容,全部乱码,弄了好久也没解决,这个该怎么解决呀,各位在行的帮忙解决一下吧,在此感谢了,

以下为我的下载代码,和网上好多是雷同的,感觉不出问题。





本帖最后由 七彩极 于 2018-3-29 21:20 编辑
用的哪个软件?




以下是正确的、完整的下载代码,楼主注意几个关键点哈:1.本地测试,文件必须是绝对路径,如C:\\......
2.echo $file_size;exit;   ——用这个代码来测试你是否成功打开了目标文件
<?php

$file_name= 'D:\\wamp\\www\\php\\活动.docx';
//$file_name= 'code.php';
$file_name=iconv("utf-8","gb2312",$file_name);
$file = fopen($file_name,'rb');
$file_size = filesize($file_name);

//echo $file_size;exit;

header("Content-type:text/html;charset=utf-8");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".$file_size);
header('Content-disposition: attachment; filename=down.docx');

$file_count=0;
$buffer = 1024;
while(!feof($file) && $file_count<$file_size){
        $file_con=fread($file,$buffer);
        $file_count+=$buffer;
        echo $file_con;
}
fclose($file);
exit;



宝剑厉不厉害,要看它的主人是谁,不信来PHP版块看看~!
引用:
原帖由 xDarlin 于 2018-03-29 16:29 发表
用的哪个软件?
用的是vscode




引用:
原帖由 七彩极 于 2018-03-29 21:19 发表
以下是正确的、完整的下载代码,楼主注意几个关键点哈:1.本地测试,文件必须是绝对路径,如C:\\......2.echo $file_size;exit;   ——用这个代码来测试你是否成功打开了目标文件[code="php"]
谢谢完美的解答,我晚上去测试一下,我想问一下为啥要绝对路径,我是上传到upload目录下,,然后直接从upload目录下读取,这样不可以吗?谢谢!




引用:
原帖由 退阔忍静 于 2018-3-30 08:14 发表

谢谢完美的解答,我晚上去测试一下,我想问一下为啥要绝对路径,我是上传到upload目录下,,然后直接从upload目录下读取,这样不可以吗?谢谢!

也可以用相对路径,但要小心使用。因为你的php网页目录与下载文件目录的相对路径可能不在同一目录中,就会涉及诸如 ../ 之类的,感觉很麻烦。

在windows下测试时,使用绝对路径 \ 时,生成的路径是 X:\,而不是我们想要的网站根目录。
可以借助 realpath 函数来获取完整路径哈




本帖最后由 七彩极 于 2018-3-30 11:22 编辑
宝剑厉不厉害,要看它的主人是谁,不信来PHP版块看看~!
那个下载还是乱码,可以识别到文件,就是下载后多了一些html代码,然后中文乱码。。。。。。也用$file_name = iconv("utf-8","gb2312",$file_name); 转了编码,文件名中文显示可以,就是下载内容出错

`D_$3B4[MP9255$HAK)SU71.png (45.58 KB)

2018-3-30 21:58

编辑的代码

`D_$3B4[MP9255$HAK)SU71.png

Y[W(YED_C52FXW25X5H3}GH.png (73.71 KB)

2018-3-30 21:58

乱码的图片

Y[W(YED_C52FXW25X5H3}GH.png




本帖最后由 退阔忍静 于 2018-3-30 22:02 编辑
引用:
原帖由 七彩极 于 2018-3-30 11:16 发表

也可以用相对路径,但要小心使用。因为你的php网页目录与下载文件目录的相对路径可能不在同一目录中,就会涉及诸如 ../ 之类的,感觉很麻烦。

在windows下测试时,使用绝对路径 \ 时,生成的路径是 X:\,而不是我们想要的网站 ...
那个下载还是乱码,可以识别到文件,就是下载后多了一些html代码,然后中文乱码。。。。。。也用$file_name= iconv("utf-8","gb2312",$file_name); 转了编码,文件名中文显示可以,就是下载内容出错,。图片在上面



首先检查下你上传的文件是否能正常打开,

然后看看 echo $file_size;exit; 这行代码是否显示了这个文件正常的大小,正常再注释掉

最后,检查你访问这个下载页面时,之前是否有其他输出内容,如果有,也会出错的。

尝试在header前调用下 ob_clean();



宝剑厉不厉害,要看它的主人是谁,不信来PHP版块看看~!
进来学习下




提示: 作者被禁止或删除 内容自动屏蔽
‹‹ 上一贴:【经验教程】最简单的curl使用方法   |   下一贴:【教程经验】运用ord()和chr()截取中文字符 ... ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2018 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com