博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用php下载的文件打不开,自己用着没问题,客户用就不行?
阅读量:6591 次
发布时间:2019-06-24

本文共 809 字,大约阅读时间需要 2 分钟。

1 现象:

  开发的时候用的好好的文件下载功能,部署到客户那边就不好使了,几乎所有从服务器下载下来的文件都不能打开。

  比较了上传前的文件、上传后服务器端的文件、下载后本机的文件,发现同一个文件,上传后还好好的,通过PHP下载下来就多了3个字节。

  使用uediter用16进制模式打开文件发现文件头部多了“EF BB BF”这三个字节。

2 分析:

  上网很容易查到这三个字节叫bom头,windows用来标识这是个utf8格式的文件。

  一开始很容易想岔,比如在下载文件的时候删除这个bom头、比如强制windows在下载的时候不添加这个bom头,可惜以上方法是不可能实现的。

  最后看到某大神在某帖子里留言说,如果PHP文件自己带着一个bom头,那么通过这个PHP文件下载的文件就会自动被添加上bom头!

  于是我下载了服务器端的PHP文件,发现服务器端的PHP文件还真的多了这三个字节!而我本地的PHP文件没有!

  那这三个字节是哪里来的呢?

  因为客户在上传这个PHP文件前用记事本编辑了该文件!!!!!!

  因为我们使用编译器的时候,考虑到中文问题,一般会将PHP文件设置成utf-8格式,整个项目都是utf-8的。

  如果用记事本编辑了这个utf-8格式的文件,系统就会自动给它加上一个BOM头,备注这是个utf-8格式的文件,系统以后方便识别这个文件!!!

  终极原因还是因为PHP开发的时候就没考虑到中文问题,所以必须用utf-8格式,而操作系统为了方便自己就给文件前面加bom头!

  所以机缘巧合之下,看到这篇文章的你,也遇到这个问题啦。

3 解决办法:

  很简单,把没有用记事本编辑过的PHP文件发给客户就问题解决啦!

  并且叮嘱客户不要用记事本去打开这些文件!!!

转载于:https://www.cnblogs.com/cation/p/7465293.html

你可能感兴趣的文章
java的左移位(<<)和右移位(>>)和无符号右移(>>>)
查看>>
struts2 action 返回类型分析
查看>>
【原创】FPGA开发手记(三) PS/2键盘
查看>>
linux统计多个文件大小总和
查看>>
java基础-Eclipse开发工具介绍
查看>>
JS常见的字符串操作
查看>>
洛谷P1069 细胞分裂 数学
查看>>
JAVA中的编码分析
查看>>
查看源代码Source not found及在eclipse中配置jdk的src.zip源代码
查看>>
document.all用法
查看>>
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>
超过响应缓冲区限制
查看>>
ubuntu 下安装 matplotlib
查看>>
webservice的几个简单概念
查看>>
underscore 1.7.0 api
查看>>
C# CheckedListBox控件的使用方法
查看>>
spring Transaction Management --官方
查看>>