2015-12-13 3 views
5

У меня есть сайт на Codeigniter 2 и при переключении версии сервера на PHP7 я получаю следующие две ошибки:CodeIgniter ошибки php7

PHP-ошибка была обнаружена Серьезность: Обратите внимание сообщение: Только переменные должны быть назначены ссылочной Имя файла: ядро ​​/ controller.php Количество линия: 51

$this->load->_base_classes =& is_loaded(); 

PHP-ошибка была обнаружена Уровень важности: 8192 Сообщение: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; CI_DB_driver имеет устаревшее конструктор Имя файла: База данных/DB_driver.php Номер Line: 31

Кто-нибудь знает, как их исправить?

+0

удалить только эту строку до $ this-> load -> _ base_classes = is_loaded(); и это должно работать нормально :) – sdx11

ответ

10

В конце концов я просто обновленное ядро ​​CI для CodeIgniter 2.2.6. Пришлось заменить драйвер DB на mysqli (поскольку mysql больше не поддерживается в php7) и повторно добавил таблицу ci_sessions в базу данных (не знаю почему). И работает как очарование!

+0

Я использую PHP 7, только что обновил свой драйвер DB от 'mysql' до' mysqli' и его обработал – Qazi

+0

Рассмотрите возможность перехода на CI3, поскольку 2.2 достигло конца жизни несколько лет назад. См. Ответ другого вопроса: https://stackoverflow.com/questions/41037434/codeigniter-compatibility-with-php-version – Roland

2

Only variables should be assigned by reference

Эта ошибка не является эксклюзивной версией PHP 7, вы также можете получить ее в более старых версиях. Во всяком случае, я думаю, что проблема здесь в is_loaded(), и он не возвращает ссылку правильно. Возвращает ли он по ссылке (это как function &is_loaded())? Если нет, это необходимо. Возвращает ли она переменную или выражение? Если это не переменная, вам нужно поместить ее в одну, прежде чем вы сможете вернуть ссылку на нее. страничное руководство

PHP для этой ошибки: http://php.net/manual/en/language.references.return.php

Methods with the same name as their class will not be constructors in a future version of PHP; CI_DB_driver has a deprecated constructor

В PHP 4 вы сделали метод конструктора, назвав его так же, как класс. Поэтому, если ваш класс был class FooBar, ваш конструктор будет public function FooBar. Однако в PHP 5 и выше рекомендуемое имя для конструктора - __construct. Итак, перейдите и отредактируйте этот класс и переименуйте его конструктор, чтобы избавиться от ошибок устаревания. Не забудьте взглянуть на все расширяющиеся классы, чтобы узнать, называют ли они этот метод конструктора, поэтому вы можете их изменить.

Смотрите руководство модернизации: http://php.net/manual/en/migration70.deprecated.php

см также RFC: https://wiki.php.net/rfc/remove_php4_constructors