在线时网站工作错误,但在本地XAMPP Server + Mikrotik路由器中可以正常工作

时间:2019-01-20 16:03:20

标签: php header xampp url-redirection mikrotik

我正在建立一个网站,该网站从Mikrotik路由器“热点”页面接收POST变量。 我使用PHP 7.1进行了离线测试XAMPP v3.2.2。一切都可以在脱机状态下正常运行,但是当我将网站放在由Cpanel提供的PHP 7.1(ea-php71)提供的在线Web服务器上时,出现标题重定向的错误。

我收到此错误:

  

PHP警告:无法修改标头信息-标头已经发送给

给我错误的页面的源代码

    <?php
    session_start();
    require_once dirname(__FILE__).'/includes/wf_DbOperations.php';
    if(!isset($_SESSION['logincust']))
    {
        header('Location: index.php');
    }
?>
<!DOCTYPE html>
<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
<!--[if !IE]><!-->
<html lang="en">
<!--<![endif]-->
    <head>
        <title>...</title>
    </head>
    <body>
        <?php
            if(isset($_SESSION['oauth_providerG']))
            {
                $db = new DbOperations();
                if(!$db->checkOAUTH($_SESSION['oauth_providerG'],$_SESSION['oauth_uid']))
                {
                    if($db->addUserMAC($_SESSION['oauth_uid'],$_SESSION['mac']))
                    {
                        $db->addUserGoogle($_SESSION['oauth_providerG'],$_SESSION['oauth_uid'],$_SESSION['first_name'],$_SESSION['last_name'],$_SESSION['email'],$_SESSION['gender'],$_SESSION['locale'],$_SESSION['picture'],$_SESSION['link']);
                        header('Location: '.$_SESSION['srvLink'].'/glogin.html');
                    }
                }
                else
                {
                    if($db->addUserMAC($_SESSION['oauth_uid'],$_SESSION['mac']))
                        {
                            header('Location: '.$_SESSION['srvLink'].'/glogin.html');
                        }
                }
            }
            if(isset($_SESSION['oauth_providerF']))
            {
                $db = new DbOperations();
                if(!$db->checkOAUTH($_SESSION['oauth_providerF'],$_SESSION['oauth_uid']))
                {
                    if(isset($_SESSION['email']))
                    {
                        if($db->addUserMAC($_SESSION['oauth_uid'],$_SESSION['mac']))
                        {
                            $db->addUserFacebook($_SESSION['oauth_providerF'],$_SESSION['oauth_uid'],$_SESSION['first_name'],$_SESSION['last_name'],$_SESSION['email']);
                            header('Location: '.$_SESSION['srvLink'].'/glogin.html');
                        }
                    }
                    else
                    {
                        if($db->addUserMAC($_SESSION['oauth_uid'],$_SESSION['mac']))
                        {
                            $db->addUserFacebookNoMail($_SESSION['oauth_providerF'],$_SESSION['oauth_uid'],$_SESSION['first_name'],$_SESSION['last_name']);
                            header('Location: '.$_SESSION['srvLink'].'/glogin.html');
                        }
                    }
                }
                else{
                        if($db->addUserMAC($_SESSION['oauth_uid'],$_SESSION['mac']))
                        {
                          header('Location: '.$_SESSION['srvLink'].'/glogin.html');
                        }
                }
            }
        ?>

    </body>
</html>

我尝试使用JS脚本location.replace进行重定向,但它不保留Mikrotik路由器发送的变量。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

第一个PHP标记之前有一个空格。

Web服务器将在到达标题之前发送这些空格。

答案 1 :(得分:0)

在您的PHP脚本中,您使用header()。您尝试在某个地方处理来自header()的数据,但此数据已发送,您可以在此错误消息中阅读

  

PHP警告:无法修改标头信息-标头已经发送给

因此,在完成header()之后,请确保您告诉脚本正确退出。 source

答案 2 :(得分:0)

if(!isset($_SESSION['logincust']))
{
    header('Location: index.php');
    exit(0);
}

如果标题下有任何代码(HTML或Php),则应使用exit。