DEDECMS后台登录空白解决办法 – DeDecms


avatar
pcwnas 2023-04-21 215

原文来自: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]))

修改完的函数,代码如下:

  1. functionkeepUser()
  2. {
  3. if($this->userID!=''&&$this->userType!='')
  4. {
  5. global$admincachefile,$adminstyle;
  6. if(emptyempty($adminstyle))$adminstyle='dedecms';
  7. if(!isset($_SESSION[$this->keepUserIDTag]))
  8. //@session_register($this->keepUserIDTag);
  9. $_SESSION[$this->keepUserIDTag]=$this->userID;
  10. if(!isset($_SESSION[$this->keepUserTypeTag]))
  11. //@session_register($this->keepUserTypeTag);
  12. $_SESSION[$this->keepUserTypeTag]=$this->userType;
  13. if(!isset($_SESSION[$this->keepUserChannelTag]))
  14. //@session_register($this->keepUserChannelTag);
  15. $_SESSION[$this->keepUserChannelTag]=$this->userChannel;
  16. if(!isset($_SESSION[$this->keepUserNameTag]))
  17. //@session_register($this->keepUserNameTag);
  18. $_SESSION[$this->keepUserNameTag]=$this->userName;
  19. if(!isset($_SESSION[$this->keepUserPurviewTag]))
  20. //@session_register($this->keepUserPurviewTag);
  21. $_SESSION[$this->keepUserPurviewTag]=$this->userPurview;
  22. if(!isset($_SESSION[$this->keepAdminStyleTag]))
  23. //@session_register($this->keepAdminStyleTag);
  24. $_SESSION[$this->keepAdminStyleTag]=$adminstyle;
  25. PutCookie('DedeUserID',$this->userID,3600*24,'/');
  26. PutCookie('DedeLoginTime',time(),3600*24,'/');
  27. $this->ReWriteAdminChannel();
  28. return1;
  29. }
  30. else
  31. {
  32. return-1;
  33. }

我的问题解决了,但有些朋友并不是因为这个问题导致的,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代码:

  1. <!–?php
  2. //此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除
  3. //ByBobShen
  4. $basedir=".";//修改此行为需要检测的目录,点表示当前目录
  5. $auto=1;//是否自动移除发现的BOM信息。1为是,0为否。
  6. //以下不用改动
  7. if($dh=opendir($basedir)){
  8. while(($file=readdir($dh))!==false){
  9. if($file!='.'&&$file!='..'&&!is_dir($basedir."/".$file))echo"filename:$file".checkBOM("$basedir/$file")."
    "
    ;
  10. }
  11. closedir($dh);
  12. }
  13. functioncheckBOM($filename){
  14. global$auto;
  15. $contents=file_get_contents($filename);
  16. $charset[1]=substr($contents,0,1);
  17. $charset[2]=substr($contents,1,1);
  18. $charset[3]=substr($contents,2,1);
  19. if(ord($charset[1])==239&&ord($charset[2])==187&&ord($charset[3])==191){
  20. if($auto==1){
  21. $rest=substr($contents,3);
  22. rewrite($filename,$rest);
  23. return("BOMfound,automaticallyremoved.");
  24. }else{
  25. return("BOMfound.");
  26. }
  27. }
  28. elsereturn("BOMNotFound.");
  29. }
  30. functionrewrite($filename,$data){
  31. $filenum=fopen($filename,"w");
  32. flock($filenum,LOCK_EX);
  33. fwrite($filenum,$data);
  34. fclose($filenum);
  35. }
  36. //结束
  37. ?>

如果上面办法还是无法解决你的问题我们可按下面方法来排查,找到:include/common.inc.php文件,打开,查找程序代码:

  1. //error_reporting(E_ALL);
  2. error_reporting(E_ALL||~E_NOTICE);
  3. 替换为:
  4. error_reporting(E_ALL);
  5. //error_reporting(E_ALL||~E_NOTICE);

这一步很重要,因为它会告诉你为什么变成空白的提示信息,这样登录后面就会看到错误提示了.