前幾天,
一個老客戶,
最近升級了服務器,
php到php7,
把織夢dedecms轉移到新服務器后,
不能登錄后台,
讓幫忙看一下。
我看了下他們的網站,
使用的是織夢V57_UTF8_SP1
前台頁面是可以訪問的,
是因為他們的dedecms生成了html靜態頁面。
但是輸入織夢后台登錄網址,
出現一片空白,
什么都沒有。
織夢dedecms后台
主要原因是dedecms是很多年以前開發的,
都是基本php4,5時代的特性,
現在的php7跟以前的版本相比,
性能提升了很多,
但是很多代碼也進行了修改,
導致不兼容以前的部分php代碼。
下面講一下怎么解決這個升級php7的一系列問題。
以下操作的目錄和文件,
都是相對你安裝dedecms的目錄
一、 打開錯誤信息
一片空白是無法調試的,
所以要做的第一件事,
能夠輸出錯誤信息。
打開 include/common.inc.php
找到下面的代碼
//error_reporting(E_ALL);
error_reporting(E_ALL || ~E_NOTICE);
改為
error_reporting(E_ALL);
//error_reporting(E_ALL || ~E_NOTICE);
主要作用是打開錯誤提示。
php錯誤提示
這樣再刷新后台,
就會有錯誤提示了。
解決了織夢后台空白問題后,
你再改過來就行。
二、 ‘continue’ not in the ‘loop’ or ‘switch’ context錯誤
你刷新后可能遇到這個錯誤
Fatal error: ‘continue’ not in the ‘loop’ or ‘switch’ context in ….include/common.func.php on line 49
上面表示include/common.func.php 這個文件的49行有錯誤,
把 continue; 刪除
改為 return;
即可
織夢最新版本helper_function代碼
最新版的織夢DedeCMS-V5.7-UTF8-SP2已經把這個錯誤修改過來。
三、 函數mysql_query()未定義
mysql_*的系列函數在php7中不能再使用,
會出現下面的錯誤
Fatal error: Uncaught Error: Call to undefined function mysql_query() in ….include/dedesql.class.php:152
php7中需要使用mysqli或者pdo的方式,
跟數據庫通信,
更安全更高效。
解決的方法
打開文件 data/config.cache.inc.php
$cfg_mysql_type = ‘mysql’;
改為
$cfg_mysql_type = ‘mysqli’;
最新版的織夢DedeCMS-V5.7-UTF8-SP2也是這樣設置的。
織夢最新版本mysql_type類型
通過上面三步,
舊的dedecms就能在php7上使用,
可以正常登錄后台了。
四、 升級到最新的DedeCMS-V5.7-UTF8-SP2
看了下這個版本的織夢源代碼,
應該是支持php7的,
你也可以把織夢升級到最新的版本,
前面3步就可以省略了。
2018年1月27日更新
可能是客戶系統環境的原因,
升級到DedeCMS-V5.7-UTF8-SP2,
編輯和發布文章時,
也是好多問題,
使用dedecms織夢系統的朋友,
把php升級到7一定要慎重。