免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3530 | 回复: 7

php做的下载代码自动添加bom头? [复制链接]

论坛徽章:
0
发表于 2012-10-30 16:16 |显示全部楼层
  1. <?php

  2. function downloadfile(){
  3.         $file_name = "test.rar";
  4.         $file_dir ="./";
  5.         if (!file_exists($file_dir."/".$file_name)){
  6.          return false;
  7.          exit;
  8.         }else{
  9.          $file = fopen($file_dir."/".$file_name,"r");
  10.          header('Content-Encoding: none');
  11.          header("Content-type: application/octet-stream");
  12.          header("Accept-Ranges: bytes");
  13.          header("Accept-Length: ".filesize($file_dir."/".$file_name));
  14.          header( 'Content-Transfer-Encoding: binary' );
  15.          header("Content-Disposition: attachment; filename=" .$file_name);
  16.          header('Pragma: no-cache');
  17.          header('Expires: 0');
  18.          echo fread($file,filesize($file_dir."/".$file_name));
  19.          fclose($file);
  20.          exit;
  21.         }
  22.       }
  23.       downloadfile();
  24. ?>
复制代码
就这样一段代码,能实现客户端下载制定文件,但现在遇到问题是客户端下载完成后test.rar压缩包打不开,用UE打开文件头一看,下载的文件自动在开头添加了EF BB BF 20这4个字节,查baidu知道前三个是UTF8的BOM标识,最后一个是空格,现在问题是不知道这4个字节是在哪一步插进去的,请教高人指点如何传送正确的文件给客户端呢?

论坛徽章:
0
发表于 2012-10-31 09:38 |显示全部楼层
我刚试了下.因为我在linux下.
所以压缩的时候是压成了test.tar.gz
然后直接下载后能打开

再换成.rar 后,下载后就打不开了.出现了你这个问题

我估计是 header('Content-Encoding: none');
         header("Content-type: application/octet-stream");
         header("Accept-Ranges: bytes");
         header("Accept-Length: ".filesize($file_dir."/".$file_name));
         header( 'Content-Transfer-Encoding: binary' );
这几个header产生的.

论坛徽章:
0
发表于 2012-10-31 11:54 |显示全部楼层
用你的代码,我测试一下windows 7 下 php 5.4.0 + apache 2.2.22 , 下载rar,zip文件都没问题。
估计和LZ的php文件编码有关系。

论坛徽章:
0
发表于 2012-11-01 07:52 |显示全部楼层
回复 3# satrun7


    谢谢提醒,我按这个线索再查查看。

论坛徽章:
0
发表于 2012-11-01 14:50 |显示全部楼层
新手还要好的学习~~

论坛徽章:
27
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:24:09CU大牛徽章
日期:2013-09-18 15:24:20CU大牛徽章
日期:2013-09-18 15:24:25CU大牛徽章
日期:2013-09-18 15:24:31CU大牛徽章
日期:2013-09-18 15:24:36CU大牛徽章
日期:2013-09-18 15:24:41CU大牛徽章
日期:2013-09-18 15:24:48CU大牛徽章
日期:2013-09-18 15:24:52处女座
日期:2013-09-27 17:45:43
发表于 2012-11-03 23:00 |显示全部楼层
自动加bom是你的php文件格式的问题,你的php文件里有bom头的话,php执行时会把它一块输出,你用16进制看一下你的php的前三个字节

论坛徽章:
0
发表于 2012-12-05 13:41 |显示全部楼层
回复 6# yifangyou


    的确是这样,要用HexEditor才能看到隐藏字符。

论坛徽章:
0
发表于 2012-12-06 09:42 |显示全部楼层
用 notepad + +  也可以看得到bom头。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP