Ich habe gerade meinen Server gewechselt und erhalte folgende Fehler:
Fatal error: Call to undefined function mysqli_init() in /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php on line 126
A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by (output started at /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php:126)
Filename: core/Common.php
Line Number: 564
Backtrace:
A PHP Error was encountered
Severity: Error
Message: Call to undefined function mysqli_init()
Filename: mysqli/mysqli_driver.php
Line Number: 126
Backtrace:
Website ist in Codeigniter. Es funktioniert sehr gut auf einem Server und auch auf dem lokalen Rechner. Wenn ich diese Website auf den neuen Server hochlade, habe ich diese Fehler. Natürlich habe ich wichtige Parameter wie Datenbankverbindung, base_url () usw. geändert.
Ich war misstrauisch wegen der Datenbank, aber ich habe eine neue Datenbank und einen neuen Benutzer erstellt usw. und die Verbindungsinformationen geändert.
Warum passiert das? Es ist hilfreich zu wissen, ob es sich um einen Fehler auf dem Server oder auf der Website handelt. Auch wenn ich einige index.html mit etwas Testcode erstelle, ist alles in Ordnung.
Es ist kein Fehler in Ihrer Anwendung, es ist nur ein fehlender Treiber, also haben Sie einige Optionen ...
Gehen Sie zu Ihrem PHP-Init und kommentieren Sie Folgendes:
extension=php_mysqli.dll
Wenn dies nicht der Fall ist, installieren Sie es auf Ihrem Server. Dies ist abhängig von Ihrer Distribution.
Versuchen Sie, php5-mysqlnd
zu installieren.
Wenn Sie dies nicht tun können, indem Sie Einschränkungen für das Hosting ausführen, wechseln Sie einfach zum mysql-Treiber.
so (in deiner Konfigurationsdatei)
$db['default']['dbdriver'] = 'mysql'; (you might have mysqli now)
Ich hatte gerade dieses Problem auf einem ubuntu16.04
, php7.1
mit Codeigniter 3
installiert.
Lösung war einfach (wenn schwer zu finden!)
Sudo apt-get install php7.0-mysql
Ich erkannte, dass die mysql*.ini
-Dateien im etc/php/7.1/mods-available
-Verzeichnis fehlten. Nicht sicher, wie es passiert ist, aber das hat für mich funktioniert.
Wenn Sie 7.2 verwenden, geben Sie einfach Sudo apt-get install php7.2-mysql
ein.
Dies ist eigentlich kein CodeIgniter-Problem, sondern ein Installationsproblem von PHP.
Ich habe PHP5.6 in meinem Linux-Server installiert und habe Schwierigkeiten damit, den googled-Lösungen der Verwendung des Befehls ff zu folgen, um die fehlende mysqli_extension in PHP zu installieren.
Was ich versucht habe, ist aber die Warnmeldung zurückgeben: Das Paket php5-mysqli kann nicht gefunden werden
Sudo apt-get install php5-mysqli
Meine PHP-Version ist jedoch 5.6, also habe ich es versucht
Sudo apt-get install php5.6-mysqli
Dann klappt es.
Benutze das:
Sudo apt-get install php7.*-mysqli
oder
Sudo phpenmod mysqli
Sudo service Apache2 restart
Öffnen Sie den Ordner, in dem Sie PHP installiert haben, Edit php.ini
-Datei
unkommentieren diese Zeile: extension=php_mysqli.dll
Ich habe versucht, die Zeile in /etc/php/cli/php.ini
-Datei auszukommentieren.
extension=php_mysqli.dll
Ich verwende Ubuntu 16.04 auf AWS-EC2-Instanzen und PHP 7.0. Das hat mein Problem gelöst.
Das Problem ist, dass die MySQL-Erweiterung von PHP möglicherweise nicht installiert ist. Wenn Sie PHP 7 verwenden, geben Sie einfach den folgenden Befehl ein und installieren Sie die Erweiterung.
Sudo apt-get install php-mysql
In meinem Fall mit Windows hatte ich alle erforderlichen Erweiterungen unkommentiert, aber sie wurden nicht geladen. Dann überprüfte ich die Erweiterungsverzeichnisvariable in php.ini und es war als "ext"
, aber dann fiel mir ein, dass ich zuvor ein ähnliches Problem hatte. Also, was ich getan habe, war im Grunde das explizite Verzeichnis. Etwas wie das:
extension_dir = "C:\php\ext"
Natürlich hängt das spezifische ext-Verzeichnis vollständig von Ihren eigenen Einstellungen und Standorten ab.
Nach dem Update der php.ini-Datei muss Apache nur noch neu gestartet werden, um die Änderungen zu übernehmen.
Wenn Sie Ihren Apache manuell installiert haben (ohne vorgefertigte Lösungen wie XAMPP oder WAMPP), müssen Sie diese Befehle nur in einer Eingabeaufforderung oder einer PowerShell mit Administratorrechten verwenden.
net stop Apache2.4
net start Apache2.4
1 、 apt-get install (yum, kompiliere install egal was) php5-mysqlnd-Erweiterung.
2 、 Wenn dies nicht funktioniert, stellen Sie sicher, dass mysqli geladen ist
[email protected]:/etc/php5/Apache2# cat /proc/31682/maps | grep mysql
wenn geladen ist, können Sie Folgendes sehen:
7f2cd3266000-7f2cd3285000 r-xp 00000000 fd:00 864561 /usr/lib/php5/20131226/mysqli.so
7f2cd69ef000-7f2cd6a2e000 r-xp 00000000 fd:00 864559 /usr/lib/php5/20131226/mysqlnd.so
3 Wenn nicht geladen, verwenden Sie php --ini, um die Konfigurationsdatei zu finden
[email protected]:~$ php --ini
Configuration File (php.ini) Path: /etc/php5/Apache2
Loaded Configuration File: /etc/php5/Apache2/php.ini
Scan for additional .ini files in: /etc/php5/Apache2/conf.d
Additional .ini files parsed: /etc/php5/Apache2/conf.d/05-opcache.ini,
/etc/php5/Apache2/conf.d/20-mysqli.ini
4 、 Wenn dies nicht die Konfigurationserweiterung ist, konfigurieren Sie die Konfiguration wie folgt, und denken Sie daran, den Webserver neu zu starten
[email protected]:~$ cat /etc/php5/Apache2/conf.d/20-mysqli.ini
; configuration for php MySQL module
; priority=20
extension=mysqli.so
In Linux können Sie die MySQL-Treibererweiterung installieren.
Sudo apt-get install php-mysql
In Windows mit XAMPP wurde der Treiber bereits im Verzeichnis ext gespeichert. Sie müssen ihn jedoch in php.ini aktivieren. Sie müssen unkommentieren diese Zeile:
extension=php_mysqli.dll
Sie müssen auch den Speicherort des Erweiterungsverzeichnisses in php.ini überprüfen. Ich benutze die absolute Pfadangabe (nicht den relativen Pfad), damit es funktioniert.
extension_dir="your\absolute\path\to\xampp\php\ext"
Zum Beispiel,
extension_dir="C:\xampp\php\ext"
Für mich war dies eine fehlende Zeile in php.ini , die das Problem gelöst hat, als ich eine andere php.ini - Datei in meineXAMPP-Installation kopierte. Es lohnt sich zu prüfen, ob die Zeile "extension=php_mysqli.dll
" vorhanden ist (wenn Windows ausgeführt wird, dies ist jedoch nicht für OP anwendbar, da es sich um ein Linux-System handelt) oder ob der "extension_dir
" existiert und korrekt ist.