为什么PHP在没有加载超文本内容时会发送标题?

时间:2013-04-26 03:21:37

标签: php html

我有一个简单的PHP页面,可以为3个URL设置cookie。问题是,即使我从未发送过任何标题信息,我仍然会收到标题错误。如何在不收到这些错误的情况下编写下面的PHP?

完整的PHP代码:

<?php
    if ($_GET["validate"] == 1)
    {
        setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.com", 0); //Access granted
        setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.net", 0);
        setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.zxq.net", 0);

        $page = urldecode($_GET["preturn"]);
        echo '<meta http-equiv="Refresh" content="0;' . $page . '">';
    }
    else
    {
        echo "Illegal page access";
    }
?>

页面加载时出错:

Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 6

页面加载时的网址:

http://b*******.com/authenticate.php?preturn=%2Fcaptcha%2Findex.php&validate=1

进一步说明: 此页面为可以访问我的站点的所有3个URL设置cookie。在用户完成简单的反机器人测试后加载此页面,以防止机器人发送下载计数器。设置cookie后,此页面会将您重定向回到首先发送给您的页面,并且由于Cookie应该在此之后就位,用户将不再看到身份验证验证码。

如果我需要提供更多信息,请与我们联系。 我只需要让这些错误消失,这样我就可以正确设置cookie。

2 个答案:

答案 0 :(得分:3)

这是一个大多数人都不会想到的小问题。但是,PHP代码之前的单个空行将导致数据被发送。只需消除空白行。我希望这有助于某人!

答案 1 :(得分:0)

setcookie()&#39; documentation

  

与其他标题一样,Cookie必须在您的任何输出之前发送   脚本(这是一个协议限制)。这要求你放置   在任何输出之前调用此函数,包括和    标签以及任何空格。

问题不在于所示的代码段中。在setcookie()函数之前至少有一个空格。