2012-02-11 81 views
0

我收到Warning: Cannot modify header information。在WAMP上测试源代码时,我没有收到这个错误。在某些PHP中也包含某些类,并根据需要调用操作html的函数。任何一个人都可以指向正确的方向吗?这是确切的错误和引用的文件。警告:无法修改GoDaddy上的标题信息,但不能修改

警告:不能更改头信息 - 已经 发送头(输出开始 /home/content/39/8810539/html/pagoda/view/header.php:2)在 /家庭/内容/39/8810539/html/pagoda/controller/login.php第9行

的login.php:

<?php 

    global $session; 
    global $view; 

    if (isset($_POST['login'])) 
    { 
     if ($session->logIn($_POST["uname"],$_POST["password"])) 
      header("Location: $_SERVER[REQUEST_URI]"); 
     else 
      $view->RenderMsg("Your username and/or password was incorrect."); 
    } 
    if (isset($_POST['logout'])) 
    { 
     $session->logOut(); 
     header("Location: $_SERVER[REQUEST_URI]"); 
    } 


?> 

的header.php片段:

<head> 
<link rel="stylesheet" type="text/css" href="<?php echo BASEPATH; ?>/view/css/homepageStyle.css" /> 
</head> 
<div id="header"> 
    <div id="banner"> 
     Pagoda 
    </div> 
    <div id="login"> 

<?php 

    //This controls the login/logout header on the top of each page. 

    global $session; 
    if ($session->isLoggedIn()) 
    { 
?> 
    <div id="nametag"> 
     <form method="POST" name="logout" action=""> 
     Welcome, <?php echo $session->getName()." (".$session->getRole().")"?> 
     <input name="logout" type="hidden" value="Log Out"/> 
     </form> 
    </div> 
    .... 
    .... 
    .... 
+0

您可以具有之前' 2012-02-11 05:39:14

+3

这里有点尴尬,但如果我是你,我的第一笔生意将从可怕的GoDaddy托管服务中转移。 – rdlowrey 2012-02-11 05:40:00

+0

请删除php文件中的尾部空格。 – Avinash 2012-02-11 05:47:15

回答

0

我用ob_start()解决了它。 ob_start首先将html写入缓冲区,然后在头部更改后将其写入浏览器。 ob_start在你的html代码之前。在ob_end_flush()的header()之后关闭缓冲区并不是必须的,但是这是一个很好的习惯。

的header.php片断:

<?php 
    ob_start() 
?> 

<head> 
<link rel="stylesheet" type="text/css" href="<?php echo BASEPATH; ?>/view/css/homepageStyle.css" /> 
</head> 
<div id="header"> 
    <div id="banner"> 
     Pagoda 
    </div> 
    <div id="login"> 

<?php 

    //This controls the login/logout header on the top of each page. 

    global $session; 
    if ($session->isLoggedIn()) 
    { 
?> 
    <div id="nametag"> 
     <form method="POST" name="logout" action=""> 
     Welcome, <?php echo $session->getName()." (".$session->getRole().")"?> 
     <input name="logout" type="hidden" value="Log Out"/> 
     </form> 
    </div> 
    .... 
    .... 
    .... 

的login.php

<?php 

    global $session; 
    global $view; 

    if (isset($_POST['login'])) 
    { 
     if ($session->logIn($_POST["uname"],$_POST["password"])) 
      header("Location: $_SERVER[REQUEST_URI]"); 
      ob_end_flush(); 
     else 
      $view->RenderMsg("Your username and/or password was incorrect."); 
    } 
    if (isset($_POST['logout'])) 
    { 
     $session->logOut(); 
     header("Location: $_SERVER[REQUEST_URI]"); 
     ob_end_flush(); 
    } 


?> 
0

BTW代码中的一些错误:“?>”

1)不要使用,否则你会得到同样的警告,如果你将不得不在文件的最后空间(有些编辑做到这一点)

2)你忘了HTML转义 “< PHP的echo $会话级>的getName()...?”:使用用htmlspecialchars()

3)不要使用全局变量。决不。

4)逻辑和视图应该分开。

+0

我想''''''''login.php'可能只是解决你的问题。显然,该文件末尾有一个空格,并且删除'?>'一个可接受的解决方案。 – seanbreeden 2012-02-11 16:25:26

+0

是否“不要使用全局变量,永远不变”。意味着你完全不使用'$ _POST'和'$ _GET'和'$ _SERVER'编写web应用程序?或者说,这是关于避免*全部*成本的语言特性的模棱两可,特别是它们有意义的地方? – mario 2012-02-11 23:23:01

+0

^哈哈哈。是的.. – 2012-02-12 02:32:44

相关问题