'Header()'和'if(isset($ _ SESSION ... then echo $ _SESSION ..'函数发生冲突并发出警告:标题已经发送

时间:2016-09-18 19:40:25

标签: php header warnings

我有这种令人困惑的警告按摩,我无法弄清楚如何解决因为我不知道是什么问题。我的videoator-a.php文件中有这行代码:

<?php require_once "esse.php";?>
<?php 
  require("common.php"); 
  if(empty($_SESSION['username'])) 
  {    
 header("Location: index.php");    
 }    
?> 

与包含的文件esse.php中的代码行冲突:

 <option><?php if(isset($_GET['lang'])){echo $_GET['lang'];}else{?>Language<?php } ?></option>

请注意,在esse.php中有一行:

session_start();

(试想这可以提供帮助) 当我打开videator-a.php页面时,它会发出警告:

Warning: Cannot modify header information - headers already sent by (output   started at D:\wamp\www\pollo\esse.php:118) in D:\wamp\www\pollo\videator-a.php on line 6

第6行有:

 header("Location: index.php");

和esse.php中的第118行有:

 <option><?php if(isset($_GET['lang'])){echo $_GET['lang'];}else{?>Language<?php } ?></option>  

如果我修改了我的videator-a.php文件:

 <?php 
 require("common.php"); 

header("Location: index.php");    

?> 
 <?php require_once "esse.php";?>

警告消失了。为什么我无法检查两个php文件中是否存在会话?这有什么不对? (对不起,我有点沸腾的水壶)

我的问题是 - 错误发生的原因。因为它说 - 标头已经发送 - 但我没有在esse.php文件中发送ny标头。仅检查会话是否存在且id如此 - 回显它。 请问,帮我解决问题。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用ob_start();

解决问题

首先将基本放在每个文件中

if(!ob_get_level()) { 
   ob_start(); 
   register_shutdown_function(function(){
       if(ob_get_level()) ob_end_flush();
   });
}

但是这个主题在这里更多的是compelx了解更多

What's the use of ob_start() in php?

whats the difference between ob_flush and ob_end_flush?