蒸汽身份验证错误标头已发送


steamauth error headers already sent

我的脚本中有一个错误,我找不到错误出现的原因。

这是我有错误的文件:

<?php
ob_start();
session_start();
require ('openid.php');
function logoutbutton() {
    echo "<form action='"steamauth/logout.php'" method='"post'"><input value='"Logout'" type='"submit'" /></form>"; //logout button
}
function steamlogin()
{
try {
    require("settings.php");
    $openid = new LightOpenID($steamauth['domainname']);
    $button['small'] = "small";
    $button['large_no'] = "large_noborder";
    $button['large'] = "large_border";
    $button = $button[$steamauth['buttonstyle']];
    if(!$openid->mode) {
        if(isset($_GET['login'])) {
            $openid->identity = 'http://steamcommunity.com/openid';
            header('Location: ' . $openid->authUrl());
        }
    return "<form action='"?login'" method='"post'"> <input type='"image'" src='"http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_".$button.".png'"></form>";
    }
     elseif($openid->mode == 'cancel') {
        echo 'User has canceled authentication!';
    } else {
        if($openid->validate()) { 
                $id = $openid->identity;
                $ptn = "/^http:'/'/steamcommunity'.com'/openid'/id'/(7[0-9]{15,25}+)$/";
                preg_match($ptn, $id, $matches);
                $_SESSION['steamid'] = $matches[1]; 
                include_once("link.php");
                $query = mysql_query("SELECT * FROM users WHERE steamid='".$_SESSION['steamid']."'");
                if (mysql_num_rows($query) == 0)
                {
                    $time=time();
                    mysql_query("INSERT INTO users (steamid,reg) VALUES ('".$_SESSION['steamid']."','$time')") or die("MySQL ERROR: ".mysql_error());
                }
                //Determine the return to page. We substract "login&"" to remove the login var from the URL.
                //"file.php?login&foo=bar" would become "file.php?foo=bar"
                $returnTo = str_replace('login&', '', $_GET['openid_return_to']);
                //If it didn't change anything, it means that there's no additionals vars, so remove the login var so that we don't get redirected to Steam over and over.
                if($returnTo === $_GET['openid_return_to']) $returnTo = str_replace('?login', '', $_GET['openid_return_to']);
                header('Location: '.$returnTo);
        } else {
                echo "User is not logged in.'n";
        }
    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}
}
?>

错误在第 24 行

这部分:

if(!$openid->mode) {
    if(isset($_GET['login'])) {
        $openid->identity = 'http://steamcommunity.com/openid';
        header('Location: ' . $openid->authUrl());
    }

这是一个 Steam 登录脚本,使用户能够登录我的网站,我希望有人可以帮助我。

您需要

将调用session_start()推迟到您确定的代码块之后。调用session_start()将 HTTP 标头发送到浏览器。一旦发生这种情况,您将无法再使用 LOCATION 标头重定向到登录页面。