非常抱歉必须这样做。 我在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;
}
轻度令人不安。
答案 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>';