当前位置:

苏州PHP培训学校推荐

苏州培训新闻内容

[ 2017-07-29 11:56:20 ] 点击:703 苏州PHP培训

技术分享:EF BB BF导致php http传输2进制流文件损坏(图片、视频、文档等)


 
一、现象
该问题目前在php中发现,在使用php向浏览器输出2进制文件(比如图片)时,服务端源文件正常,输出到客户端后图片变成:无法打开,已损坏。
此处是php输出2进制流,不是直接用http伺服器输出图片!
 
#原图
 
 
#经php输出后的结果
 Windows照片查看器无法打开此图片,因为此文件可能已经损坏、损毁或过大

 
二、分析问题
经php http输出的图片无法打开,先检查传输后的文件大小,源文件和传输文件都是占用空间4K,看不出问题。改用araxis merge把两个文件比较(切换到二进制模式比较),可以看出以下现象
 

可以看到输出文件的头部多了3个字节 EF BB BF,导致图片无法正常打开,此时使用ultraedit的2进制模式编辑此文件,删除顶部3个字节,发现图片可以正常打开。即确认在php传输2进制文件的过程中,系统默认添加了3个字节:EF BB BF。
开始从php中寻找EF BB BF的来源,怀疑是http缓冲区的问题。试用以下代码验证
<?php
ob_clean();
ob_start();
$var = fread(fopen("c:\学途网.jpg", "r"), filesize("c:\学途网.jpg");
echo $var;
 
@unlink("c:\xuetu.net.jpg");
file_put_contents("c:\xuetu.net.jpg", ob_get_contents(), FILE_APPEND);
 
ob_end_flush();
?>
结果:从缓冲区去取得的数据输出到c:\xuetu.net.jpg可以正常展示,但是http输出的图片依然存在问题。判断php本身无任何问题,应该还是http输出的时候,被系统添加了3个字节。
 
因为php语言的特殊性,语法是由 <?php 为开头的脚本语言,所有在标记范围外的字符,会被php用作默认输出。在linux中使用 header xuetu.net.php ,可以看到
#header xuetu.net.php
?<?PHP
....
....
字样,说明文件开头多了一个?字符。
回到windows中,用editplus或者ultraedit直接打开,一切正常
 
再切换到十六进制模式查看,发现多了EF BB BF,也就是输出2进制文件中被默认添加的3个字节。
 
 

三、解决方案
该3个字节是windows对于utf8文件格式的隐藏标识,即utf-8 + bom。可以使用windows下的各种文本编辑工具,打开php源文件,另存为....,在选项中,把utf-8 + bom 改为 utf8即可。
 
所有关联include过的文件,全部都要改,否则每一个文件的bom都会在2进制输出时,分别添加一次3字节。
 
把文件改成ansi编码也是一种解决方案,因为篇幅原因,对为什么不用 ansi编码解决,暂不做更多介绍。
 
 
四、php是世界上最好的语言
 
 
以上内容为学途网 xuetu.net原创,禁止转载。

匿名评论

所有评论

[2017-09-10] 匿名 评论: Приобрести сироп Mangoosteen можно на веб-сайте http://mangystin.bxox.info Сок Замброза,Напиток Ксанго,Сироп Мангустина для похудения Природные антиоксиданты: применение, отзывы врачей, www.moykrest.ru/sirop-mangustin http://vk.com/id370235746

[2017-09-09] 匿名 评论: гостиная Роза http://buycookies.info/ ----------

[2017-09-08] 匿名 评论: гостиная Роза http://buycookies.info/ ----------

[2017-09-07] 匿名 评论: гостиная Роза http://pronews24.ru/ ----------

[2017-09-07] 匿名 评论: гостиная Роза http://buycookies.info/ ----------

[2017-08-22] 匿名 评论: Perfect instrumental background music for romantic and sentimental films, presenting your business, new products or your company in general with an optimistic and motivational touch. Visit site: Music for romantic

[2017-08-21] 匿名 评论: Приобрести сироп Mangoosteen можно на веб-сайте http://mangjoo77.mangoosteen.com

[2017-08-21] 匿名 评论: Приобрести сироп Mangoosteen можно на веб-сайте http://mangjoo77.mangoosteen.com

[2017-08-21] 匿名 评论: Perfect instrumental background music for romantic and sentimental films, presenting your business, new products or your company in general with an optimistic and motivational touch. Visit site: Music for romantic

[2017-08-20] 匿名 评论: гостиная Роза http://bigwork.info/ ----------

[2017-08-20] 匿名 评论: Приобрести сироп Mangoosteen можно на веб-сайте http://mangjoo77.mangoosteen.com

[2017-08-20] 匿名 评论: Приобрести сироп Mangoosteen можно на веб-сайте http://mangjoo77.mangoosteen.com

[2017-08-19] 匿名 评论: Приобрести сироп Mangoosteen можно на веб-сайте http://mangjoo77.mangoosteen.com

[2017-08-07] 匿名 评论: Компания Суфле производит женские и мужские сумки только из натуральной кожи. В нашей коллекции Вы увидите разнообразные модели для тех, ... http://bags.moykrest.ru

[2017-08-06] 匿名 评论: Элитные итальянские кожаные сумки TONY PEROTTI: модно, стильно, престижно .... Именно поэтому сумки из натуральной кожи TonyPerotti являются ... http://bags.moykrest.ru

学途最新培训新闻