Session must be started before any output has been sent to the browser;问题解决

今天升级项目,发现部署后访问报错,

Session must be started before any output has been sent to the browser; outp

原因是在session_start() 有输出或者其他原因。

这也没法检查啊!!!

后来在网上找到了一段程序,检测并删除BOM的,之后就访问正常了。

原文找不到了

贴出程序以供参考:

<?php   
      
    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) { // BOM 的前三个字符的ASCII 码分别为 239 187 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 );   
    }   
  

 使用方法:

先备份下一的项目代码:

将以上代码保存到一个文件中(例如a.php),放到webroot下

访问 项目地址/a.php?dir=你的项目目录

浏览器中显示:

 

 会显示出那些文件自动清除了BOM。

访问页面看看正常了吗。

posted @ 2020-03-18 16:31  阿飞afei  阅读(293)  评论(0编辑  收藏  举报