我已将我的 PHP 升级到 7.3.4 版以安装 CodeIgniter 3.1.10。在此之后,我注意到我网站的某些部分不再像以前那样工作(使用 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 的值后,这次它不会为空,而是会被填写。此时,在转到相同的错误 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
}
}
编辑:我的网址看起来像www.<sitename>.com/<languagesegment>/<optionalcityname>/<pathcontroller&function>
如果在 URL 中填写了可选的城市名称,则整个网站都以城市颜色和徽标等标记。如果省略,则显示“正常”网站。
访问“正常”站点时,我的 404 页面会正确显示。