2015-12-13 15 views
5

Mam witryny na CodeIgniter 2 i po zmianie wersji serwera do PHP7 uzyskać następujące dwa błędy:CodeIgniter błędy php7

PHP Błąd wystąpił Zagrożenie: Zauważ wiadomość: tylko zmienne powinny być określone przez odniesienia Nazwa pliku: rdzeń/Controller.php Ilość Line: 51

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

PHP błąd wystąpił Powaga: 8192 Wiadomość: Metody o tej samej nazwie, co ich klasy, nie będą konstruktorami w przyszłej wersji PHP; CI_DB_driver ma przestarzałego konstruktora Nazwa pliku: database/DB_driver.php Numer linii: 31

Czy ktoś wie, jak je naprawić?

+0

tylko usuń zmianę linii na $ this-> load -> _ base_classes = is_loaded(); i to powinno działać dobrze :) – sdx11

Odpowiedz

10

Ostatecznie właśnie zaktualizowaną rdzeń Ci do CodeIgniter 2.2.6. Musiał zmienić sterownik DB na mysqli (ponieważ mysql nie jest już obsługiwany w php7) i ponownie dodano tabelę Ci_sessions w bazie danych (nie mam pojęcia dlaczego). I działa jak urok!

+0

Używam PHP 7, Właśnie zaktualizowałem mój sterownik DB z 'mysql' na' mysqli' i jego działa – Qazi

+0

Rozważ upgrade do CI3, ponieważ 2.2 osiągnął koniec życia kilka lat temu. Aby uzyskać szczegółowe informacje, patrz odpowiedź innego pytania: https://stackoverflow.com/questions/41037434/codeigniter-compatibility-with-php-version – Roland

2

Only variables should be assigned by reference

Ten błąd nie jest przeznaczony wyłącznie dla PHP 7, dostaniesz go również w starszych wersjach. W każdym razie, myślę, że problem tutaj jest w is_loaded() i nie zwraca poprawnie referencji. Czy zwraca referencję (czy jest to np. function &is_loaded())? Jeśli nie, to musi. Czy zwraca zmienną lub wyrażenie? Jeśli nie jest zmienną, musisz umieścić ją w jednym, zanim zwrócisz odwołanie do niej.

PHP strona podręcznika dla tego błędu: 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

W PHP 4, dokonane konstruktora nazywając go takie same jak w klasie. Jeśli więc twoja klasa to class FooBar, twoim konstruktorem będzie public function FooBar. W PHP 5 i późniejszych zalecana nazwa dla konstruktora to __construct. Więc idź i edytuj tę klasę i zmień nazwę konstruktora, aby pozbyć się błędów usuwania. Koniecznie spójrz na wszystkie rozszerzające się klasy, aby sprawdzić, czy wywołują tę metodę konstruktora, aby móc je zmienić.

Patrz podręcznik modernizacji: http://php.net/manual/en/migration70.deprecated.php

Zobacz także RFC: https://wiki.php.net/rfc/remove_php4_constructors