首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

解決 PHP 5.4 環境下 織夢 DedeCMS 後台登入空白頁問題

     編輯:PHP 相關知識

升級至 PHP 5.4 後,DedeCMS 5.7 後台登入成功卻顯示空白頁(白屏)。根本原因是 PHP 5.4 移除了 session_register() 函式,而 DedeCMS 核心檔案 include/userlogin.class.php 的 keepUser() 方法仍在使用該過時函式。本文提供精確的修復程式碼。

問題分析

  • 環境:Linux + PHP 5.4 + DedeCMS 5.7
  • 錯誤點:include/userlogin.class.php 中的 keepUser() 使用 @session_register($this->keepUserIDTag) 等語句。
  • 原因:session_register() 自 PHP 5.4 起被完全移除(不再只是棄用),呼叫會導致嚴重錯誤中斷腳本,造成白屏。

修復方案:改用 $_SESSION 超全域陣列

直接操作 $_SESSION 即可達到相同效果,且相容所有 PHP 版本。

原始程式碼(需修改處)

@session_register($this->keepUserIDTag);
$_SESSION[$this->keepUserIDTag] = $this->userID;
@session_register($this->keepUserTypeTag);
$_SESSION[$this->keepUserTypeTag] = $this->userType;
@session_register($this->keepUserChannelTag);
$_SESSION[$this->keepUserChannelTag] = $this->userChannel;
@session_register($this->keepUserNameTag);
$_SESSION[$this->keepUserNameTag] = $this->userName;
@session_register($this->keepUserPurviewTag);
$_SESSION[$this->keepUserPurviewTag] = $this->userPurview;
@session_register($this->keepAdminStyleTag);
$_SESSION[$this->keepAdminStyleTag] = $adminstyle;
PutCookie('DedeUserID', $this->userID, 3600 * 24, '/');
PutCookie('DedeLoginTime', time(), 3600 * 24, '/');

修正後程式碼(直接替換上述區塊)

global $admincachefile, $adminstyle;
if (empty($adminstyle)) $adminstyle = 'dedecms';

// 移除所有 @session_register() 呼叫,直接寫入 $_SESSION
$_SESSION[$this->keepUserIDTag] = $this->userID;
$_SESSION[$this->keepUserTypeTag] = $this->userType;
$_SESSION[$this->keepUserChannelTag] = $this->userChannel;
$_SESSION[$this->keepUserNameTag] = $this->userName;
$_SESSION[$this->keepUserPurviewTag] = $this->userPurview;
$_SESSION[$this->keepAdminStyleTag] = $adminstyle;

PutCookie('DedeUserID', $this->userID, 3600 * 24, '/');
PutCookie('DedeLoginTime', time(), 3600 * 24, '/');

操作步驟

  1. 備份 include/userlogin.class.php。
  2. 使用編輯器開啟,搜尋 session_register。
  3. 將上述區塊完整替換為修正後程式碼。
  4. 儲存,重新整理後台登入頁,問題即可解決。

補充說明

  • 原程式碼中重複寫入 $_SESSION[$this->keepUserIDTag] = $this->keepUserIDTag; 等賦值是多餘的,修正版已移除。
  • global $admincachefile, $adminstyle; 確保變數作用域正確。
  • 若仍有空白頁,請開啟 PHP 錯誤顯示(display_errors=On)或查看錯誤日誌排查其他潛在問題。

總結

PHP 版本升級帶來的函式移除是舊專案遷移常見痛點。善用 $_SESSION 取代 session_register()/session_unregister()/session_is_registered() 是通用解法,建議全專案搜尋替換,徹底相容 PHP 5.4+。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved