由于奇怪的输出,php'header'重定向失败

时间:2017-01-13 19:29:36

标签: php redirect

非常抱歉必须这样做。 我在1个文件(constants.php)中有以下常量DEFINE:

define('ROOTDIR', '/var/www/OrgName');
define('INCLUDESDIR', ROOTDIR.'/ssincludes');
define('CLASSESDIR', ROOTDIR.'/ssincludes/classes');
define('WEBSERVERIP', 'my.very.special.ip');
define('ROOTDIREXT', '/OrgName/html');
define('ROOTSITE', 'http://'.WEBSERVERIP.ROOTDIREXT);

然后在一个简单验证用户帐户尚未存在的php文件中,如果没有验证传入的POST数据并为新用户创建新的用户MySQL记录(无论哪个),我有这个代码(剥离)不相关,我认为):

require('../../ssincludes/constants.php');
require(INCLUDESDIR.'/utilities.php');
require_once(CLASSESDIR.'/clsScout.php');
require_once(CLASSESDIR.'/manager/ClassManager.php');
require_once(CLASSESDIR.'/manager/ClassCode.php');

//Then start - continue the session so PHP knows how to reconstruct the session object
session_start();
SessionCheck();    //A function in utilities.php that just refreshes some $_SESSION[] vars

//Handle the current state of the Authenticator flag
if(!isset($_SESSION['Authenticated'])) {
        $_SESSION['Authenticated']=false;
} else {
    if($_SESSION['Authenticated']==true) {
        $_SESSION['Message'] = "You are already logged in and do not require a new account.";
        header("Location: ".ROOTSITE."/index.php");
    }
}

MakeUser();
header("Location: ".ROOTSITE."/index.php");
exit;

function MakeUser() {
    //Does various things, I have verified no output
    return;
}

从Chrome浏览器的角度来看,标题声明失败了。检查HTML方面的结果,我看到了:

<html>
    #shadow-root (open)
    <shadow>
        ->head reveal
        ->body reveal
    </shadow>
    <style>
    </style>
    <head>
    </head>
    <body>
    </body>
</html>

在php程序文件和所有包含的文件中搜索文本HTML HEAD BODY SHADOW(等)不会产生任何结果。显然(对我来说),有些东西是注入输出,可能是错误的PHP,但php.ini被设置为显示错误(开发站点),对于其他页面肯定会这样做。

有人见过这个输出吗?我想我正在寻找抽象的想法,甚至可能是Chrome“假设”的东西而且它不是真正的输出。有问题的php是通过直接(FORM method ='PST'action ='thispage.php')提交来调用的,所以也没有JS延迟。

任何帮助或想法都将不胜感激。

- UPDATE -

我从未解决过这个问题,幸运的是,服务器爆炸了。我在一台新服务器上并重新启动它上面的代码。新服务器的问题相同,但这一次我已经准备好了。由于这篇文章变得陈旧,我想我会分享,也许有人有一个我可以追求的“概念”。

从REQUIRE PHP类中,浏览器没有得到任何回报(除了200),所以我在类中使用了一些故事(类生成HEAD代码并将一些顶部的代码置换掉):

echo "Seem to not be having any problem here so far<br />";
$this->content = $this->MakeBigFatString();
echo "And we're back, wanna see?<br />";
var_dump($this->content);
return $this->content;

我明白了:

Seem to not be having any problem here so far
And we're back, wanna see?
string(960) " "

我想我会寻找“语言环境”错误功能等。

- 已解决 -

在附带的工具箱中的函数中:

(string)$query = "SELECT ContactType FROM contacttype ORDER BY ContactType";
(object)$result = $db->query($query);
if(!$result || $db->errno || $result->num_rows==0) {
    $content .= "</select>\n";
    unset($query);
    echo "This line prints if below exit is used<br />";
    //exit;
    @$result->free();
    //this line is never reached if @result->free() is allowed to execute
    //no 200, no exceptions, no nothing, just blank stares
    //PHP error displays, error logging, html errors -- all turned on
    //just nothing
    $db->close();
    return $content;
}

轻度令人不安。

2 个答案:

答案 0 :(得分:0)

您看到的HTML在Chrome中是默认的。但是你说你得到错误?什么是错误消息?它是否无法重定向?

另一件事。每次使用header()函数重定向时,都应该始终使用die()或exit()。否则你只需设置标题但不会立即重定向。

也许你应该改写这个:

if(!isset($_SESSION['Authenticated'])) {
    $_SESSION['Authenticated']=false;
} else {
    if($_SESSION['Authenticated']==true) {
        $_SESSION['Message'] = "You are already logged in and do not require a new account.";
        header("Location: ".ROOTSITE."/index.php");
    }
}

要:

if(isset($_SESSION['Authenticated']) && $_SESSION['Authenticated'] == true){
    $_SESSION['Message'] = "You are already logged in and do not require a new account.";
    header("Location: ".ROOTSITE."/index.php"); die();
}

答案 1 :(得分:0)

更改此行

header("Location: ".ROOTSITE."/index.php");

到此

echo <script> window.location = "'.ROOTSITE.'/index.php"'.'</script>';