簡體   English   中英

升級到PHP 7.3后的CodeIgniter問題

[英]CodeIgniter problems after upgrading to PHP 7.3

我已將我的PHP升級到適用於CodeIgniter 3.1.10的7.3.4版。 之后,我注意到網站的某些部分不再像以前那樣工作了(使用PHP 5.6)。

用例之一是當我輸入錯誤的URL時,如下所示:

www.abc.com/nl-be/antwerpen/this-is-a-bad-url

通常,這將轉到我的404頁面,但是現在我首先遇到以下錯誤:

Message: Call to a member function helper() on null

Filename: D:\wamp\www\codeigniter\application\hooks\LanguageLoader.php

代碼是:

class LanguageLoader
{
    function initialize() {
        $ci =& get_instance();
        $ci->load->helper('language');

        $site_lang = $ci->session->userdata('site_lang');
        if ($site_lang) {
            $ci->lang->load('message',$ci->session->userdata('site_lang'));
        } else {
            $ci->lang->load('message',$ci->session->userdata('site_lang'));
        }
    }
}

我設法找到解決方法,使用下面的代碼克服了這個問題(這正確嗎?):

class LanguageLoader
{
    function initialize() {
        $CI =& get_instance();
        if ($CI === null) {
            new CI_Controller();
            $CI =& get_instance();
        }
        $CI->load->helper('language');

        $site_lang = $CI->session->userdata('site_lang');
        if ($site_lang) {
            $CI->lang->load('message',$CI->session->userdata('site_lang'));
        } else {
            $CI->lang->load('message',$CI->session->userdata('site_lang'));
        }
    }
}

在檢查$ CI的值之后,這次它將不為null,但將被填充。這時,在轉到相同的錯誤URL之后,我收到以下錯誤消息:

Message: call_user_func_array() expects parameter 1 to be a valid callback, class 'Error' does not have a method 'my404'

Filename: core/CodeIgniter.php

該行上的CodeIgniter.php中的代碼包含:

call_user_func_array(array(&$CI, $method), $params);

該錯誤特別奇怪,因為我在Error類中有一個my404方法:

class Error extends My_Controller {
    public function my404() {
        //Code to show my 404 template
    }
}

編輯:我的URL看起來像www.<sitename>.com/<languagesegment>/<optionalcityname>/<pathcontroller&function>

如果在URL中填寫了optionalcityname,則整個網站都以城市的顏色和徽標等為品牌標記。如果忽略該網站,則會出現“普通”網站。

轉到“正常”網站時,我的404頁面會正確顯示。

我從未使用過CodeIgniter,但快速瀏覽文檔似乎表明,他們莫名其妙地不使用名稱空間。 對於現代代碼庫,這是聞所未聞的,您正在學習為什么。

PHP 7.0引入Error作為所有內部PHP錯誤的基類。 由於您的代碼未命名空間,因此您試圖覆蓋此內置類。 如果查看錯誤日志,則會看到類似以下內容的內容:

PHP Fatal error:  Cannot declare class Error, because the name is already in use in...

將您的Error類重命名為非保留名稱 ,這可以使您克服此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM