Я обновил свой PHP до версии 7.3.4 для моей установки CodeIgniter 3.1.10.После этого я заметил, что некоторые части моего сайта больше не работают, как раньше (с PHP 5.6).
Один из случаев использования, когда я печатаю неверный URL-адрес, например:
www.abc.com / nl-be / antwerpen / url-it-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);
Ошибка особенно странная, так как у меня есть метод my404 в моем классе ошибок:
class Error extends My_Controller {
public function my404() {
//Code to show my 404 template
}
}
РЕДАКТИРОВАТЬ: мой URL выглядит как www.<sitename>.com/<languagesegment>/<optionalcityname>/<pathcontroller&function>
Если в URL указано полное имя, весь сайтмаркируется в цветах городов, логотипах и т. д. Если он не указан, появляется «нормальный» сайт.
При переходе на «нормальный» сайт моя страница 404 отображается правильно.