php标头给我错误

时间:2015-12-03 11:15:25

标签: php header

首先,不要认为它是一个多愁善感的问题。 我尝试了所有的解决方案,但没有任何帮助我。

我收到以下错误:  “无法修改标题信息 - 已在第4行的/home/gogiavag/public_html/maxkapital/func.php中发送(由/home/gogiavag/public_html/maxkapital/user.php:7开始的输出)标题”

我转换为utf8的所有页面(没有BOM)。我在开始时没有领先的空间,但除了没有任何帮助。

这是我的代码:

的login.php

<?php session_start();?> 
 <html>
 <head>
 <meta charset="utf-8" /> 
 <link rel="stylesheet" type="text/css" href="style.css"/>
 </head>    
 <body>
 <?php include "header.php"; require_once 'func.php';?> 
    <form method="POST" action="user.php">
    <table style="margin-top: 10px;">
    <tr>
    <td><label for ="txtuser">name:</label></td>
    <td><input type="text" style="padding:5px;" id="txtuser" name="txtuser" value="<?php if (isset($_SESSION['txtuser'])
    ){echo $_SESSION['txtuser'];}else{echo '';} ?>"  </input></td>
    </tr>
    <tr>
    <td><label for ="txtpassword">password:</label></td>
    <td><input type="password" style="padding:5px;" id="txtpassword" name="txtpassword"> </input></td>
    </tr>

    <tr>
    <td></td>
    <td><input type="submit" value ="Enter" style="padding:5 55 5 55;background-color:#3f4194;color:#fff;" name="btnsubmit" id="btnsubmit"> </td>
    </tr>   

    </table>    
    </form>

    <?php 
    if (isset($_SESSION['err'])){
        if ($_SESSION['err']===true){
            echo gg_stringformat("<img src='error.png' style='margin-left:50px;'><img/> <span style='font-size:10pt; color:#ff0000'>{0}</span>",     $_SESSION['errmsg']);
        }   
    }

    if(isset($_SESSION['err'])){unset ($_SESSION['err']);};
    if(isset($_SESSION['errmsg'])){unset ($_SESSION['errmsg']);};
    if(isset($_SESSION['txtuser'])){unset ($_SESSION['txtuser']);};
    if(isset($_SESSION['txtpassword'])){unset ($_SESSION['txtpassword']);};
    ?>

</body> 

</html>

user.php的

<?php session_start();?>
<html>
<head>
<meta charset="utf-8"/> 
</head>
<body>
<?php require_once'func.php';
if (!isset($_POST['btnsubmit'])){
    gg_redirect('block.php');
    exit;
}
$user=$_POST['txtuser'];
$pass=$_POST['txtpassword'];
$_SESSION['txtuser'] = $user;
$_SESSION['txtpassword'] = $pass;
if (gg_trim($user)===''){
    $_SESSION['err']=true;
    $_SESSION['errmsg']='User name required';
    gg_redirect('login.php');
    exit;
}elseif(gg_trim($pass)===''){$_SESSION['err']=true;$_SESSION['errmsg']='Password required';gg_redirect('login.php');
 exit;  
} 
echo $user, "<BR>", $pass;
?>
</body>
</HTML>

的header.php

<div id="divheader" >
<p> <img src="coins.png"></img>MAX_KAPITAL</p>
</div>

func.php 以...开头

<?php
    mb_internal_encoding("UTF-8");
    function gg_redirect($url){
        header("location: $url");
    }

...

当用户没有输入密码或用户名时,它会给我错误。

请在我的代码中找到错误。  提前谢谢。

对George Gogiava的看法

2 个答案:

答案 0 :(得分:3)

PHP不是骗你的,你确实已经在user.php的第2行开始输出了 - 你打印<html>来回复那里。

然后您打印<head>以及更多HTML,然后从gg_redirect()调用函数func.php !isset($_POST['btnsubmit']),这会导致错误,因为它不再可能发送重定向标题,因为输出已经开始。

在将任何发送回客户端(除了其他响应标头之前)之前,您需要检查输入并可能重定向。具体来说,在完成处理之前不要打印任何HTML可能的重定向:

<?php
    // includes here - they must have no output!
    // check if all is OK, set $redirectURL if redirect is needed to that URL
    if ($redirectUrl) {
        header("location: $redirectUrl");
        exit(); // header() won't cause the script to stop executing
    }
?>
<html>
<head>
...

重定向前包含的文件不能打印任何输出 - 甚至不是空行,因此它们必须都有<?php作为文件的第一个字符,整个文件必须是PHP没有任何输出到响应体,并且必须以?&gt;结尾?之后没有换行符或空格(在这种情况下PHP可能会修剪一些空格但不依赖于此。)

调用session_start()是安全的,可以在重定向之前(如果需要会话变量,则很有用),因为它不会发送任何响应正文。它可以设置一个cookie,但这没关系,因为cookie是在标题中发送的。

答案 1 :(得分:1)

虽然@Jiri已正确解释,但要更明确:

移动这个:

<?php require_once'func.php';
if (!isset($_POST['btnsubmit'])){
    gg_redirect('block.php');
    exit;
}

到你最好的PHP脚本,甚至可能像这样添加第一行:

<?php 
if (!isset($_POST['btnsubmit'])){
    gg_redirect('block.php');
    exit;
}
require_once'func.php';
session_start();
?>

然后是你网页的其余部分。

修改 func.php 正在添加标题,通过在重定向之前包含它,您会收到该错误。重定向后将inlude行移动到某个位置或检查 func.php ,查看上面编辑的代码