使用php下载的文件打不开,自己用着没问题,客户用就不行?

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文件发给客户就问题解决啦!

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

时间: 2024-10-06 09:07:51

使用php下载的文件打不开,自己用着没问题,客户用就不行?的相关文章

httpurlconnection下载pdf文件打不开的原因,和解决代码

前几天遇见一个问题,httpurlconnection发送请求下载pdf文件的时候,文件是下载下来了,但是打不开. 之前并没有对pdf操作的相关功能,所以一直是使用的字符流读取内容. 字符流主要针对一些文本文档(比字节流操作的效率要高),比如.txt..doc,而pdf就不行. 字节流几乎可以对任何文件类型进行操作,主要是对非文件类型的,如媒体文件(音频,视频,图片-). //之前使用reader读取返回内容BufferedReader reader = new BufferedReader(n

微信收到图纸打不开怎么办?手机微信接收下载的文件在哪

都知道现在真的很流行手机看图,CAD手机看图是为了方便大家看图的一款软件,目前是做到了可以随时随地看图,不论身在何处,只要有手机,有CAD手机看图软件,打开图纸即可浏览,方便又快捷.那么如何有人从微信或者QQ发给你一张CAD图纸文件,不是dwg/png格式的,那我们该如何打开?从而更好地完成工作进度?那就接着往下看.步骤1:手机微信下载的文件一般储存在tencent-MicroMsg-Download,所以在文件管理文件夹中就可以找到相关的CAD图纸文件. 步骤2,如果你想要打开dwg文件,可以

win7系统 .chm文件打不开的解决办法

一.正确操作方法1.鼠标右键单击该CHM文件,在右键快捷窗口中选择“打开方式”-“Microsoft HTML Help Executable”:2.如果出现一个提示窗口,大意是说,该CHM文件的发行商未知等,是否确定打开.请一定要将“每次都提示该窗口”的复选框的勾去掉!否则就会出现“该页无法显示”的情况.3.打开后,内容区就显示正常了!以后直接双击该CHM文件,就可以正常显示了! 二.出现空白页面或该页无法显示的错误解决办法:右键单击CHM文件的,选择“属性”,发现“常规”栏下多出几行字:“安

win8系统中chm文件打不开怎么办

chm是一种常见的帮助文件,正常情况下,双击chm文件就能直接打开了,不过最近有Win8系统用户反映chm文件打不开,用户不知道这是怎么回事,也不知道该怎么办,为此非常苦恼.好系统重装助手来告诉你Win8系统chm文件打不开要怎么办呢? 1.打开chm文件时,会弹出来一个安全警告窗口,我们需要点击"打开"按钮: 2.打开之后会发现,点任何选项,右边框中都是空白: 3.这个时候需要我们关闭文件,然后找到文件,右键属性: 4.在常规栏中找到下面的"安全"项,点击&quo

前端下载excel文件功能的三种方法

1 从后端接收json数据,前端处理生成excel下载 JsonExportExcel的github地址:https://github.com/cuikangjie/JsonExportExcel 这种方式比较适用于该数据需要能够导出下载并且同时要展现在页面的场景 2 通过form表单接收文件 如果后端已经处理成了excel,就不需要前端在处理生成,但是Ajax能够返回的数据格式只能为html,script,json,xml,不能直接接受excel文件,如果你直接通过ajax去获取文件就会报错.

下载大文件时OutofMemoryException

有一个大文件下载的问题,这两天查了一下,主要原因有两个: 发送的Get请求中,没有设置HttpCompletionOption这个参数,当下载大文件的时候,会等到response body中的数据全部加载完才开始下载.现在已经改成了HttpCompletionOption.ResponseHeadersRead,这样只要head加载完就可以开始下载 下载的时候使用FileStreamResult File(Stream fileStream, string contentType, string

PSFTP自动登录SFTP服务器,批量自动上传上传下载指定文件

1.putty官方下载 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 下载安装版  putty-0.67-installer.msi 2.安装完成之后,打开putty安装目录,找到PSFTP.EXE,复制到新的文件夹 D:/Download 3.双击打开pstftp.exe,连接Linux服务器 4. 设置下载到windows的本地目录 5.psftp常用命令(操作服务端的文件则是Linux常用命令) lcd+路径

IIS 服务器支持下载apk 文件

前不久,在本地IIS文件下部署一个网站,可以下载apk文件,就是测试apk应用升级,发现访问不能下载,原因是IIS没有配置对这种apk文件的处理程序. 解决方案如下所示: 1.打开IIS, 找到MIME选项 2.点击右边的添加在弹出的添加窗口里的文件扩展名输入:APK 在MIME类型输入:application/vnd.android.package-archive

路由器OpenWrt如何脱机(离线)下载BT文件

路由器OpenWrt如何脱机(离线)下载BT文件 1.首先到如下网址下载OpenWrt固件(确保为路由器正确型号). http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-wzr-hp-g450h-squashfs-sysupgrade.bin 2.路由器升级完毕后用telnet输入192.168.1.1(默认地址)连接到路由器,默认没有密码,输入“passwd”修改密码,修改成功后输入“exit”退