2015-12-13 13 views
5

Ich habe eine Website auf Codeigniter 2 bekam und als ich Server-Version zu PHP7 schalte ich die beiden folgenden Fehler erhalten:Codeigniter php7 Fehler

Ein PHP-Fehler aufgetreten Schweregrad: Nachricht Hinweis: Nur Variablen Kern/Controller.php Line Number: 51

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

Ein PHP-Fehler aufgetretensollte durch Verweis Dateiname zugeordnet werdenBewertung: 8192 Nachricht: Methoden mit dem gleichen Namen wie ihre Klasse werden keine Konstruktoren in einer zukünftigen PHP-Version sein; CI_DB_driver hat einen veralteten Konstruktor Dateiname: database/DB_driver.php Zeilennummer: 31

Kann jemand sie beheben?

+0

nur entfernen Sie die Zeile in $ this-> load -> _ base_classes = is_loaded(); und das sollte gut funktionieren :) – sdx11

Antwort

10

Schließlich hat gerade CI Kern zu CodeIgniter 2.2.6 I. Musste den DB-Treiber in mysqli ändern (da mysql in php7 nicht mehr unterstützt wird) und die ci_sessions-Tabelle in der Datenbank neu hinzugefügt (keine Ahnung warum). Und funktioniert wie ein Zauber!

+0

Ich benutze PHP 7, habe gerade meinen DB-Treiber von 'mysql' auf' mysqli' aktualisiert und es funktionierte – Qazi

+0

Erwägen Sie ein Upgrade auf CI3, da 2.2 vor einigen Jahren das Ende der Lebensdauer erreicht hat. Siehe die Antwort der anderen Frage für Details: https://stackoverflow.com/questions/41037434/codeigniter-compatibility-with-php-version – Roland

2

Only variables should be assigned by reference

Dieser Fehler ist nicht PHP 7-exklusiv, Sie würden es auch in älteren Versionen bekommen. Wie auch immer, ich denke, das Problem ist hier in is_loaded() und es gibt keine Referenz richtig zurück. Gibt es eine Referenz zurück (ist es wie function &is_loaded())? Wenn nicht, muss es. Gibt es eine Variable oder einen Ausdruck zurück? Wenn es sich nicht um eine Variable handelt, müssen Sie sie in eine Variable einfügen, bevor Sie eine Referenz darauf zurückgeben können.

PHP-Handbuch Seite für diesen Fehler: 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, haben Sie eine Konstruktor-Methode durch sie das gleiche wie die Klasse zu benennen. Wenn Ihre Klasse also class FooBar wäre, wäre Ihr Konstruktor public function FooBar. In PHP 5 und darüber hinaus lautet der empfohlene Name für einen Konstruktor jedoch __construct. Also, gehen Sie und bearbeiten Sie diese Klasse und benennen Sie ihren Konstruktor um, um die Deprecation-Fehler loszuwerden. Stellen Sie sicher, dass Sie alle erweiterten Klassen sehen, um zu sehen, ob sie auch diese Konstruktormethode aufrufen, damit Sie sie ändern können.

Siehe Upgrade Leitfaden: http://php.net/manual/en/migration70.deprecated.php

auch die RFC sehen: https://wiki.php.net/rfc/remove_php4_constructors