这个问题已经存在了几天,我无法得到任何解决方案。
我有两个托管服务器。让我们称他们为pt和net。
如果我在网上安装这个网站,一切都没关系,但如果我把它移到pt,它会给我以下错误:
致命错误:无法使用backoffice类型的对象作为数组 /nfs/c01/h13/mnt/####/domains/mysite.pt/html/backoffice/topo.php on 第77行
这只发生在这台服务器上。在本地主机和网络服务器上,一切正常。
第77行有:
<?php echo $_SESSION['backoffice']['nome']?>
如果我var_dump $ _SESSION ['backoffice']它在不同的服务器上给我这个:
在localhost和net:
array (size=4)
'id' => string '1' (length=1)
'nivel' => string '2' (length=1)
'nome' => string 'MyName' (length=9)
'email' => string 'email@email.com' (length=23)
在pt服务器上给我这个:
object(__PHP_Incomplete_Class)#4 (2) { ["__PHP_Incomplete_Class_Name"]=> string(10) "backoffice" ["db"]=> object(__PHP_Incomplete_Class)#2 (6) { ["__PHP_Incomplete_Class_Name"]=> string(2) "db" ["descriptor"]=> int(0) ["db"]=> string(22) "name_of_database_here" ["query"]=> int(0) ["result"]=> array(22) { [0]=> array(5) { ["id"]=> string(2) "16" ["titulo"]=> string(13) "Administração" ["descricao"]=> string(39) "Lorem ipsum dolor sit amet, consectetur" ["estado"]=> string(1) "1" ["slug"]=> string(13) "administracao" }
我已在两台服务器上检查了php.ini,它们是完全相同的。
我必须创建数组Backoffice的类是:
function login($email, $password, $session) {
$email = filter_var(mysql_real_escape_string($email), FILTER_SANITIZE_EMAIL);
$password = filter_var(mysql_real_escape_string(md5($password.SALT)), FILTER_SANITIZE_STRING);
$session = filter_var(mysql_real_escape_string($session), FILTER_SANITIZE_NUMBER_INT);
$query="SELECT id, nome, email, nivel, hash FROM admin WHERE email='$email' AND password='$password' LIMIT 1";
$login=$this->db->opencursor($query);
if ($login) {
$_SESSION['backoffice']['id']=$login[0]['id'];
$_SESSION['backoffice']['nivel']=$login[0]['nivel'];
$_SESSION['backoffice']['nome']=$login[0]['nome'];
$_SESSION['backoffice']['email']=$login[0]['email'];
if ($session) setcookie("backoffice", $login[0]['hash'], time()+(7*24*60*60), "/");
else setcookie("backoffice", '', time()-3600, "/");
$this->saveLog($login[0]['id'],$_SERVER['REMOTE_ADDR']);
return true;
}
else {
$this->ban($_SERVER['REMOTE_ADDR'], $_SERVER['REQUEST_TIME']);
return false;
}
}
而且,我无法找到错误 - 帮助。
三江源
Amal Murali - 这篇文章没有重复,我已经搜索过这样的问题,但我没有找到适合的解决方案。
Jim,你的解决方案有所帮助。当我第一次登录并加载页面时,该数组似乎正常。
我有一个功能,检查用户是否有cookie保持登录,并添加了那段代码。现在我的功能看起来像:
if ($login) {
**$_SESSION['backoffice'] = array();**
$_SESSION['backoffice']['id']=$login[0]['id'];
$_SESSION['backoffice']['nivel']=$login[0]['nivel'];
$_SESSION['backoffice']['nome']=$login[0]['nome'];
$_SESSION['backoffice']['email']=$login[0]['email'];
if ($session) setcookie("backoffice", $login[0]['hash'], time()+(7*24*60*60), "/");
else setcookie("backoffice", '', time()-3600, "/");
$this->gravaLog($login[0]['id'],$_SERVER['REMOTE_ADDR']);
return true;
}
但是,如果我重新加载页面,数组将返回同样的混乱。