关于PHP的BOM头
一直用的是wamp的环境,php的版本还停留在5.3.php7都出来了,我连php5.6都还没用一把,很多相对于5.3时代的新函数和特性都还没体验到.但是碍于懒,决定装phpstudy切换到5.6的版本体验一把.
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站制作、孙吴网络推广、小程序设计、孙吴网络营销、孙吴企业策划、孙吴品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供孙吴建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
原先的wamp环境下MySQL是没有登录密码的,但是phpstudy默认有个密码,所以我需要去我目前的项目框架配置项里改一下数据库的连接密码,心想就是改个密码嘛犯不着开sublime了,直接用记事本给改了.然后打开我的项目,首页出来了,没啥问题,再点登录,哎?验证码咋不出来了?用firebug抓了一下验证码的访问地址,没问题啊.然后去验证码的类文件里关掉了header部分,然后浏览器执行验证码的url,也不报错,只是给出和以往没开header时类似的一堆乱码.这下×××了.
网站登录没验证码,这叫什么.赶紧百度了一下.很激动,发现提这种问题的很多哎~很快就发现了一个显眼的词,BOM头.以前好像也听说过,记得是刚学php的时候,有个视频里面的老师提过,说不推荐大家用dw和记事本写php因为会生成一个BOM头,但当时根本不知道生成这个BOM头会带来什么后果.我用的是一个基于THINKPHP修改过的框架,网上反应这个问题的绝大多数都是在THINK社区,所以我觉得我的问题应该能参照他们的解决方案试一下.经过粗略扫描,发现了一个看起来比较靠谱的答案.这位大牛提供了一份代码.如下:
"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } }//end while closedir($dh); }//end if($dh }//end function function checkBOM($filename){ global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if(ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191){ if($auto == 1){ $rest = substr($contents, 3); rewrite ($filename, $rest); return "BOM found, automatically removed."; }else{ return ("BOM found."); } } else return ("BOM Not Found."); }//end function function rewrite($filename, $data){ $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); } ?>
将这段代码保存成一个php文件,放到你的项目根目录中,执行一下,它会自动去除掉你当前目录下所有文件里的BOM头.验证码瞬间就刷出来了.
这里贴一个关于BOM头的科普:解释BOM头和去掉方法
本文标题:关于PHP的BOM头
网址分享:http://scyanting.com/article/peegsd.html