原文来自:https://www.zixuephp.com
DEDECMS后台登录空白解决办法
今天下载了一个新版的dedecmsv5.7安装之后突然发现登录后台发现空白了,我php环境是使用的php5.4系统,经过百度php5.4把@session_register(); 去了,而且dedecmsv5.7还使用这个函数所以就出错了,下面我来分析解决办法.
解决方法:打开 include/userlogin.class.php 文件,在当前文件搜索keepUser(),然后把这个下面的@session_register();给注释掉就行了!
当然要不影响,可以改成,代码如下:
if (!isset($_SESSION[$this->keepUserTypeTag]))
修改完的函数,代码如下:
- functionkeepUser()
- {
- if($this->userID!=''&&$this->userType!='')
- {
- global$admincachefile,$adminstyle;
- if(emptyempty($adminstyle))$adminstyle='dedecms';
- if(!isset($_SESSION[$this->keepUserIDTag]))
- //@session_register($this->keepUserIDTag);
- $_SESSION[$this->keepUserIDTag]=$this->userID;
- if(!isset($_SESSION[$this->keepUserTypeTag]))
- //@session_register($this->keepUserTypeTag);
- $_SESSION[$this->keepUserTypeTag]=$this->userType;
- if(!isset($_SESSION[$this->keepUserChannelTag]))
- //@session_register($this->keepUserChannelTag);
- $_SESSION[$this->keepUserChannelTag]=$this->userChannel;
- if(!isset($_SESSION[$this->keepUserNameTag]))
- //@session_register($this->keepUserNameTag);
- $_SESSION[$this->keepUserNameTag]=$this->userName;
- if(!isset($_SESSION[$this->keepUserPurviewTag]))
- //@session_register($this->keepUserPurviewTag);
- $_SESSION[$this->keepUserPurviewTag]=$this->userPurview;
- if(!isset($_SESSION[$this->keepAdminStyleTag]))
- //@session_register($this->keepAdminStyleTag);
- $_SESSION[$this->keepAdminStyleTag]=$adminstyle;
- PutCookie('DedeUserID',$this->userID,3600*24,'/');
- PutCookie('DedeLoginTime',time(),3600*24,'/');
- $this->ReWriteAdminChannel();
- return1;
- }
- else
- {
- return-1;
- }
我的问题解决了,但有些朋友并不是因为这个问题导致的,DedeCMS 5.3/5.5/5.6等版本的UTF版本会经常遇到一个问题,就是后台登录会什么都不显示,空白一片.
一般这个问题都是由于使用了“记事本”而没有使用专业的文本编辑软件来编辑DedeCMS的文件造成的,一般是由于修改了以下几个文件:
include/common.inc.php
data/common.inc.php
dede/config.php
如果你使用了“记事本”之类的软件修改这些文件,修改后都会在文件中加上BOM,造成程序不能正常运行.
可以使用下面的代码来清除文件中的BOM,解决DEDECMS后台列表和登录空白的问题:
Cs_BomKill.php代码:
- <!–?php
- //此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除
- //ByBobShen
- $basedir=".";//修改此行为需要检测的目录,点表示当前目录
- $auto=1;//是否自动移除发现的BOM信息。1为是,0为否。
- //以下不用改动
- if($dh=opendir($basedir)){
- while(($file=readdir($dh))!==false){
- if($file!='.'&&$file!='..'&&!is_dir($basedir."/".$file))echo"filename:$file".checkBOM("$basedir/$file")."
";- }
- closedir($dh);
- }
- functioncheckBOM($filename){
- global$auto;
- $contents=file_get_contents($filename);
- $charset[1]=substr($contents,0,1);
- $charset[2]=substr($contents,1,1);
- $charset[3]=substr($contents,2,1);
- if(ord($charset[1])==239&&ord($charset[2])==187&&ord($charset[3])==191){
- if($auto==1){
- $rest=substr($contents,3);
- rewrite($filename,$rest);
- return("BOMfound,automaticallyremoved.");
- }else{
- return("BOMfound.");
- }
- }
- elsereturn("BOMNotFound.");
- }
- functionrewrite($filename,$data){
- $filenum=fopen($filename,"w");
- flock($filenum,LOCK_EX);
- fwrite($filenum,$data);
- fclose($filenum);
- }
- //结束
- ?>
如果上面办法还是无法解决你的问题我们可按下面方法来排查,找到:include/common.inc.php文件,打开,查找程序代码:
- //error_reporting(E_ALL);
- error_reporting(E_ALL||~E_NOTICE);
- 替换为:
- error_reporting(E_ALL);
- //error_reporting(E_ALL||~E_NOTICE);
这一步很重要,因为它会告诉你为什么变成空白的提示信息,这样登录后面就会看到错误提示了.