phpwind9.0升級到php7後出現的問題修復

最近將一個兩年多之前的用phpwind9.0搭建的論壇升級到php7,遇到了頁面沒法打開,顯示爲500錯誤,排查了一成天時間,終於解決!php

 

一、打開文件:src/applications/appcenter/service/srv/PwDebugApplication.phpweb

定位到214行代碼正則表達式

修改代碼:php7

if (!$toinstall instanceof iPwInstall) continue;
$r = $toinstall->install($install);
if ($r instanceof PwError) return $this->_e($install, $r);
$install->addInstallLog('service', $_tmp);

修改後app

if($toinstall instanceof iPwInstall){
    $r = $toinstall->install($install);
    if ($r instanceof PwError) return $this->_e($install, $r);
    $install->addInstallLog('service', $_tmp);
}

 

二、打開文件:/src/windid/service/base/WindidUtility.php 函數

定位到94行代碼this

修改成:spa

if (!isset($exts[$imageInfo[2]])) return false;

 

三、修改preg_replace函數爲preg_replace_callback
src/library/ubb/PwUbbCode.php
src/library/ubb/PwSimpleUbbCode.php
說明:preg_replace正則表達式再也不支持/e,須要使用preg_replace_callback來替換code

 

四、/wind/web/WindForward.php:96router

修改代碼:

} elseif ($merge && !empty($this->vars[$key])) {

修改後:

} elseif ($merge && isset($this->vars[$key]) && $this->vars[$key]) {

 

五、僞靜態開啓後出現錯誤修復

定位代碼到:/src/library/route/PwRoute.php:217 

修改代碼:

foreach ($this->params as $k => $v) {
            if ($route[$k] === $router->$methods[$k]() && $flag === $flags[$k]) $flag = $consts[$k];
            $_args[$v] = $route[$k];
            unset($args[$k]);
        }

修改後:

foreach ($this->params as $k => $v) {
            $_method=$methods[$k];
            if ($route[$k] === $router->$_method() && $flag === $flags[$k]) $flag = $consts[$k];
            $_args[$v] = $route[$k];
            unset($args[$k],$_method);
        }

 

結論:此行代碼中沒有在foreach循環以內,所以不能出現關鍵字continue,而在php7前continue關鍵字是容許不在foreach中出現的,因而可知php7更加規範了;php7對preg_replace不在支持"/e"修飾符,是一個大坑;empty在php5.5後支持表達式了,第4處能夠不修改

相關文章
相關標籤/搜索