您的位置:首页 > 编程语言 > PHP开发

PHP使用header()向浏览器发送图像的乱码问题

2013-07-30 19:00 1036 查看
对于站外文件夹下的文件,我们无法用浏览器直接查看。这个时候需要通过代理php脚本(proxy script)来让服务器把原文件的内容发送到浏览器上。

比如说我们打开一个窗口来查看图片,理想中的url应该是酱紫的:http://www.xxx.com/proxy.php?image=xxx.png.这时候我们就会用到一个php函数:

header()

因为它的功能强大,所以他的参数可以是很长很长很长的string。但是这家伙有点麻烦,对于我这种把网络工程的内容早就忘光的人来说一扯到这些我就头痛,而且很多error都来自于对它的使用不当。

比如用弹出窗口查看原图片——不好意思,乱码。 就很可能是因为header()使用错误所致。

常见的有以下几种可能:

1、可能是手贱在<?php前面打了个回车。header()表示“我不接受在我之前向web浏览器发送任何东西hehe╮(╯▽╰)╭空格键也不行”。所以不要再<?php之前打任何东西,php代码在调用header()之前也不要有任何譬如echo,print这样向浏览器发送信息的语句。

2、如果多次调用header(),请在每次调用的时候,string参数以换行符\n结尾,就像酱紫:

header("Content-Type: application/pdf\n").

但是你以为header()用对了打开图片就一定不是乱码了么....图样图森破...

3、任何一个错误都有可能导致无法正常打开。

比如少打了个半括号,【不要以为IDE每次都会准确地提醒你】多个括号嵌套的时候IDE表示我也很捉急好么!!!丫经常告诉我没语法错误最后倒头来发现很多错误的好么!!就是单纯地少打了个字母多打了个逗号什么的后果都是很严重滴好么!!!!血泪的教训告诉每一个像我这样奋斗在前端之路的菜鸟:不要相信/依赖你的IDE,就像不要相信男人【闭嘴

那肿么办。

事实证明不论是php还是javascript,debugging绝壁是浏览器最好用啦!!【别跟我提IE,摒弃IE9-,从身边做起,从你我做起

php代码出现错误的时候,浏览器的错误信息可以精确到很牛逼的程度,甚至精确到line number。如果仅仅是语法上的错误,line number所在方圆几行内应当就会找准错误所在了。

4、练习的时候不要偷懒

比如考虑到如果图片无法正常获取的情况,这时候应该让您的用户在电脑的另一端看到一个替代的图片,上面可能是一个颜色很淡的哭脸,或者干脆裂开的图片。我们可以把它取名为unavailable.png,放在站内的images文件夹下,方便读取。

if(isset($_GET['image'])){

//验证图片格式、获取图片路径、检验图片有效等等

}

if(!$name) {//获取图片的过程出了问题

$image = 'images/unavailable.png';

$name = 'unavailable.png';

}

可有时候,反正是只是练习,我写代码的时候就会想“反正前面$_GET['image']相关的部分肯定没问题,下面这个if(!$name) 的情况我用不到...我只是想练习前面的部分,我甚至没有把一个unavailable.png文件放在images文件夹下。

结果就是,打开图片——乱码。

实际上尽管if(!$name) 的情况并没有用到,但php依旧会检查路径的可用性,所以当替代图片根本子虚乌有的时候,正常的图片也是无法显示出来啦~

5、使用多个浏览器进行test

相同的情况下可能火狐是乱码,而chrome则业界良心地把错误信息毫无保留地显示在了浏览器上。

6、其实最应该先做的是寻找错误出现在哪个环节。

php代码?javascript?

比如我打开图片的时候,窗口显示url为http://www.xxx.com/proxy.php后面什么都没有,那么可能根本连javascript都写错了;

又或者http://www.xxx.com/proxy.php?image=后面跟了一连串莫名其妙的东西,那么可能在获取图片信息的时候出了错误。

有时候什么都没问题的时候,可能是php的charset设置与浏览器不一致。所以建议先使用utf-8。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: