1. 程式人生 > >更換PHP 5.4以上版本後Dedecms後臺登入空白的解決方法

更換PHP 5.4以上版本後Dedecms後臺登入空白的解決方法


PHP的版本從5.2.14升到5.4.15,升級完後dedecms後臺開啟空白,檢查各種許可權和檔案,沒有問題,那就有可能是PHP版本函式的問題,它是用session_register來註冊一個session變數,但是在php5.4以上中已經移除了這個功能

解決辦法:

找到include/userlogin.class.php,裡面有一個keepuser()函式,它是用session_register來註冊一個session變數,但是在php5.4中已經移除了這個功能,見官網介紹:

如果使用的該php版本肯定會出錯的,不過我們可以修改下程式碼:

把@session_register($this->keepUserIDTag); 註釋掉,然後改為


 
  1. if (!isset($_SESSION[$this->keepUserIDTag])) 

一共有六個,全部改為下面這樣:


 
  1. if (!isset($_SESSION[$this->keepUserIDTag])) 
  2. //@session_register($this->keepUserIDTag); 
  3.  
  4. $_SESSION[$this->keepUserIDTag] = $this->userID; 
  5.  
  6. if
     (!isset($_SESSION[$this->keepUserTypeTag])) 
  7. //@session_register($this->keepUserTypeTag); 
  8.  
  9. $_SESSION[$this->keepUserTypeTag] = $this->userType; 
  10.  
  11. if (!isset($_SESSION[$this->keepUserChannelTag])) 
  12. //@session_register($this->keepUserChannelTag);
     
  13.  
  14. $_SESSION[$this->keepUserChannelTag] = $this->userChannel; 
  15.  
  16. if (!isset($_SESSION[$this->keepUserNameTag])) 
  17. //@session_register($this->keepUserNameTag); 
  18.  
  19. $_SESSION[$this->keepUserNameTag] = $this->userName; 
  20.  
  21. if (!isset($_SESSION[$this->keepUserPurviewTag])) 
  22. //@session_register($this->keepUserPurviewTag); 
  23.  
  24. $_SESSION[$this->keepUserPurviewTag] = $this->userPurview; 
  25.  
  26. if (!isset($_SESSION[$this->keepAdminStyleTag])) 
  27. //@session_register($this->keepAdminStyleTag); 
  28.  
  29. $_SESSION[$this->keepAdminStyleTag] = $adminstyle; 

重新進入後臺登入,就可以正常跳轉到管理頁面了。

因為對PHP並不熟,網上一般都說是data/common.inc.php檔案編碼的問題,把編碼要改為無BOM格式檔案儲存,居然沒有說是php5.4版本的問題

另外一種方法:

在include/helpers/util.helper.php末尾加入以下程式碼


 
  1. function fix_session_register(){    
  2.     function session_register(){    
  3.         $args = func_get_args();    
  4.         foreach ($args as $key){    
  5.             $_SESSION[$key]=$GLOBALS[$key];    
  6.         }    
  7.     }    
  8.     function session_is_registered($key){    
  9.         return isset($_SESSION[$key]);    
  10.     }    
  11.     function session_unregister($key){    
  12.         unset($_SESSION[$key]);    
  13.     }    
  14. }    
  15. if (!function_exists('session_register')) fix_session_register(); 

這樣php5.4以上  dedecms就能正常使用了。