在线时网站工作错误但在本地工作正常 XAMPP 服务器 + Mikrotik 路由器
Website working error when online but work fine in local XAMPP Server + Mikrotik router
我正在构建一个从 Mikrotik 路由器热点页面接收 POST 变量的网站。
我使用 XAMPP v3.2.2 和 PHP 7.1 进行离线测试。离线时一切正常,但是当我将网站放在 Cpanel 提供的在线 Web 服务器上时 PHP 7.1 (ea-php71) 我收到 header 重定向指令的错误。
我收到这个错误:
PHP Warning: Cannot modify header information - headers already sent by
报错页面源码
<?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 路由器发送的变量。
感谢您的帮助。
您在第一个 PHP 标签之前有一个 space。
Web 服务器将在到达 header 内容之前发送那些 space。
在您的 PHP 脚本中,您使用 header()
。您尝试在某处操作来自 header()
的数据,但此数据已发送,您可以在该错误消息
中阅读
PHP Warning: Cannot modify header information - headers already sent by
所以在您 header()
之后,确保您告诉脚本正确退出。
source
if(!isset($_SESSION['logincust']))
{
header('Location: index.php');
exit(0);
}
如果您在 header 下有任何代码(Html 或 Php),您应该使用退出。
我正在构建一个从 Mikrotik 路由器热点页面接收 POST 变量的网站。 我使用 XAMPP v3.2.2 和 PHP 7.1 进行离线测试。离线时一切正常,但是当我将网站放在 Cpanel 提供的在线 Web 服务器上时 PHP 7.1 (ea-php71) 我收到 header 重定向指令的错误。
我收到这个错误:
PHP Warning: Cannot modify header information - headers already sent by
报错页面源码
<?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 路由器发送的变量。
感谢您的帮助。
您在第一个 PHP 标签之前有一个 space。
Web 服务器将在到达 header 内容之前发送那些 space。
在您的 PHP 脚本中,您使用 header()
。您尝试在某处操作来自 header()
的数据,但此数据已发送,您可以在该错误消息
PHP Warning: Cannot modify header information - headers already sent by
所以在您 header()
之后,确保您告诉脚本正确退出。
source
if(!isset($_SESSION['logincust']))
{
header('Location: index.php');
exit(0);
}
如果您在 header 下有任何代码(Html 或 Php),您应该使用退出。