2015-12-13 20 views
5

ho un sito su Codeigniter 2 e quando passo la versione del server per PHP7 Ottengo i seguenti due errori:CodeIgniter errori php7

A PHP Error Si è verificato Severity: Avviso Messaggio: Solo le variabili deve essere attribuito adottando riferimento Nome file: core/controller.php linea Numero: 51

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

A PHP Error Gravità: 8192 Messaggio: I metodi con lo stesso nome della classe non saranno costruttori in una versione futura di PHP; CI_DB_driver ha un costruttore deprecato Nome file: database/DB_driver.php Numero riga: 31

Qualcuno sa come risolverli?

+0

rimuovere solo quella riga su $ this-> load -> _ base_classes = is_loaded(); e che dovrebbe funzionare bene :) – sdx11

risposta

10

nucleo CI Alla fine ho appena aggiornato alla CodeIgniter 2.2.6. Ho dovuto cambiare il driver DB in mysqli (dato che mysql non è più supportato in php7) e ho aggiunto la tabella ci_sessions nel database (non so perché). E funziona come un fascino!

+0

Sto usando PHP 7, Ho appena aggiornato il mio driver DB da 'mysql' a' mysqli' e ha funzionato – Qazi

+0

Considera l'aggiornamento a CI3 come 2.2 ha raggiunto la fine della vita alcuni anni fa. Vedere la risposta di altre domande per i dettagli: https://stackoverflow.com/questions/41037434/codeigniter-compatibility-with-php-version – Roland

2

Only variables should be assigned by reference

Questo errore non è PHP 7 esclusiva, si otterrebbe in versioni precedenti anche. Ad ogni modo, penso che il problema qui sia in is_loaded() e non sta restituendo un riferimento correttamente. Restituisce per riferimento (è come function &is_loaded())? In caso contrario, è necessario. Restituisce una variabile o un'espressione? Se non è una variabile, è necessario inserirla in una prima di poterla restituire.

pagina del manuale di PHP per questo errore: 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

In PHP 4, si fece un metodo di costruzione nominando lo stesso come la classe. Quindi se la tua classe era class FooBar, il tuo costruttore sarebbe public function FooBar. In PHP 5 e versioni successive, tuttavia, il nome consigliato per un costruttore è __construct. Quindi, vai e modifica quella classe e rinomina il suo costruttore per sbarazzarti degli errori di deprecazione. Assicurati di controllare le eventuali classi di estensione per vedere se chiamano anche quel metodo di costruzione, così puoi cambiarle.

consultare la Guida per l'aggiornamento: http://php.net/manual/en/migration70.deprecated.php

vedere anche RFC: https://wiki.php.net/rfc/remove_php4_constructors