-想您所想,多年经验-
白狐广告电话
白狐广告标志
当前位置:网站首页 - 信息中心
php报错:headers already sent by和验证码不显示,原因:bom头
2015-4-26|阅:2493|来自:白狐广告

  最近新做了一套网站,部署到win下面的iis上了,由于要进行大改,所以就复制出来一份,在iis里物理路径指定到新的复制出来的那一个文件夹上了,在浏览时,出现头部错误:Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\php\APMServ5.2.6\www\htdocs\index.php:1) in D:\php\index.php on line 1
  而且,验证码也不显示了。把物理路径重新指定到老的文件夹上,又一切正常了。仔细检查代码没有任何改动怎么会出现错误呢?百度以后终于找到原因,原来是bom头的原因。
  

清除一下bom头再试一下。bom清除函数

[code]
<?php

 //remove the utf-8 boms

 //by magicbug at gmail dot com

if (isset($_GET['dir'])){ //config the basedir

    $basedir=$_GET['dir'];

}else{

    $basedir = '.';

 }

$auto = 1;

checkdir($basedir);

function checkdir($basedir){

     if ($dh = opendir($basedir)) {

         while (($file = readdir($dh)) !== false) {

          if ($file != '.' && $file != '..'){

              if (!is_dir($basedir."/".$file)) {

                    echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";

                }else{

                    $dirname = $basedir."/".$file;

                   checkdir($dirname);

                 }

            }

         }

    closedir($dh);

    }

 }

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 ("<font color=red>BOM found, automatically removed.</font>");

        } else {

             return ("<font color=red>BOM found.</font>");

         }

     }

    else return ("BOM Not Found.");

 }

function rewrite ($filename, $data) {

     $filenum = fopen($filename, "w");

     flock($filenum, LOCK_EX);

    fwrite($filenum, $data);

     fclose($filenum);

 }

 ?>
[/code]
  把上面code里的代码,保存成一个文件,执行一下,错误提示没有了,验证码也正常显示出来了。
  深入解读:什么是BOM头?
  类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。
  PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!
==========================================================================
  window编辑器如果保存为utf8文件就会帮你加上BOM头,以告诉其他编辑器以utf8来显示字符
  但是在网页上并不需要添加BOM头识别,因为网页上可以使用 head头 指定charset=utf8告诉浏览器用utf8来解释.但是你用window自动的编辑器,编辑,然后有显示在网页上这样就会显示出0xEF 0xBB 0xBF这3个字符。
  这样网页上就需要去除0xEF 0xBB 0xBF,可以使用editplus 选择不带BOM的编码,这样就可以去除了


标 签: php报错 验证码不显示 bom头

www.internetzg.com Copyright 2015-2020 | 以上内容白狐广告保留解释权,任何个人或单位不得抄袭COPY本公司网站内容,违者必究。

 

↑上一篇文章: PHP升级到5.3后报session_regist…
返回目录    ↓下一篇文章: asp网站如何防止上传图片木马?

白狐网站建设 白狐设计专门从事网站建设平面广告设计,专业致力于为企业及个人提供优质网站设计(网站建设、网站改版)网站优化推广域名空间画册设计(企业画册设计、产品画册设计、样本设计)印刷彩页单页设计印刷名片T恤衫设计制作台历挂历设计制作标志设计( LOGO设计、商标设计)产品包装设计制作艺术照片设计等。公司是由一流的设计师和专业的制作人员组成的运营团队,拥有多年的网站及广告设计制作经验,服务客户遍及北京、河北、山东、江苏等地区。
首 页 | 关于白狐 | 网站建设 | 平面广告 | 产品服务 | 合作伙伴 | 人才招聘 | 友情链接 | 网站地图 | 联系我们 | 站内搜索
白狐广告www.internetzg.com 网站最佳分辨率为1024*768 京ICP备06068476号
白狐广告服务电话:010-53312027 
13693231513技术 13522191688业务 15011320345售后 15810850699优化
北京网站建设,手机网站建设,北京网站建设公司,北京 北京白狐广告有限责任公司 版权所有
白狐广告公司地址:北京市朝阳区朝阳路8号朗廷大厦A座312室 邮编:100024
返回白狐广告顶部