无法修改标题信息 - 挡板

问题描述:

我得到了典型的'警告:不能修改标题信息 - 标题已经发送(输出开始...行14)'。这通常是由于header()方法之前的echo语句造成的,但令人困惑的是,在header()本身之前没有任何回声被调用。请你能告诉我输出的发生位置,以及为什么它目前让我困惑,并且进一步,所以我可以在将来解决这个问题。无法修改标题信息 - 挡板

第14行是内容的div中的一行:

<p>Lorem ipsum...</p> 

在先进的感谢,

最大。

<html> 
<head> 
<title></title> 
<!-- CSS --> 
<link ... /> 
</head> 
<body class="index not-admin"> 
    <div id="wrapper"> 
    <div id="logo"></div> 
     <div id="headerInvoice"> 
     </div> 
<div id="content"> 
    <form name="signup" action="" method="GET"> 
     <input name="email" type="email" placeholder="Email Address" /> 
     <input type="submit" title="Submit!"/> 
    </form> 
    <?php 
    if($_SERVER['REQUEST_URI'] == '/betas/') { 
     header('Location:http://betas.maxk.me'); 
    } 
    if (isset($_GET['email'])) { 
     $email = $_GET['email']; 
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      $error = 'Email Address is invalid.'; 
     } 
     else { 
      mysql_connect('localhost', '...', '...'); 
      mysql_select_db('...'); 
      $email = mysql_real_escape_string($email); 
      if (mysql_num_rows(mysql_query("SELECT * FROM testers WHERE `email_address` = '$email'")) < 1) { 
       mysql_query("INSERT INTO `testers` (`email_address`,`accepted`) VALUES ('$email','0')"); 
       $error = !mysql_error()? 'Success!' : "We came across an error, please try again! " . mysql_error(); 
      } 
      else { 
       $error = 'Sorry, but you have already signed up! Please try emailing me to see if I need any testers through my <a href="http://maxk.me">homepage</a>.'; 
      } 
     } 
     echo $error; 
    } 
?> 
<br /> 
<a href="#">Login</a> 
</div>  
<div id="footer"> 
</div> 
</div> 
</body> 
</html> 
+0

你知道你没有关闭你的第一个 steveoh 2012-03-06 23:19:19

的问题是在这里:

if($_SERVER['request_URI'] == '/betas/') { 
    header('Location:http://betas.maxk.me'); 
} 

调用header在文件中的任何HTML后会导致错误。 The PHP documentation深入解释了这一点。

这不仅适用于echo具体。 <?php标签之外的任何内容也会散发出来,并会导致此问题。

您应该将您的重定向代码放在文件的顶部,而不是嵌入其中,因为HTML已经在那个位置输出。

E.g.此行之前

<?php 
    if($_SERVER['REQUEST_URI'] == '/betas/') { 
     header('Location:http://betas.maxk.me'); 
    } 
?> 
<html> 
... 

一切:

<?php 
    if($_SERVER['REQUEST_URI'] == '/betas/') { 
    header('Location:http://betas.maxk.me'); 

    // .. etc 

计数作为输出。当您拨打header()时,一大堆内容已经发送到输出。你也许可以用ob_*函数捕获它,但我敢打赌有一个更好的解决方案。

开头PHP标签之前的所有HTML都被视为正在发送的数据,因此您需要在您的文件顶部正好位于HTML代码之上的PHP头语句。

任何不在<?php ?>标记内的标记都会以与echo语句相同的方式处理,并在脚本中直接发送到浏览器。任何呼叫(或涉及HTTP标头的任何内容)必须来自第一个PHP块。请注意,文件开头处的空格也会导致此问题。