2017-05-08 6 views
3

Hintergrund

Ich habe WAMP Server (3.0.6) installiert auf meinem Windows-Computer 10. Ich entwickle eine WordPress-Website mit ein paar benutzerdefinierten MySQL-Tabellen, also verwende ich $wpdb.PHP 7.1.x - mysqli_connect definiert sich nicht (Erweiterung eingeschaltet ist)

Problem

ich auf PHP 7.0.10 lief, und alles war in Ordnung. An diesem Morgen, ich installierte PHP 7.1.4, und plötzlich habe ich diesen Fehler:

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in ...\wp-includes\wp-db.php:1573

ich hinein gegraben und verfolgen das Thema zurück in die __construct() Funktion, und diese if Aussage:

if (function_exists('mysqli_connect')) { 

Ein var_dump zeigte mir, dass function_exists('mysqli_connect')false zurückgibt.

enter image description here

nicht die Antwort

Das Problem NICHT ist, dass ich die aktiviert mysqli Erweiterung nicht haben:

enter image description here

enter image description here

enter image description here

Dinge, die ich

versucht habe, habe ich wieder auf 7.0.x geschaltet (und der Fehler verschwunden), gelöscht 7.1.4 neu installiert 7.1.4 und schalten sie zurück. Es funktioniert immer noch nicht.

Ich habe versucht 7.1.0, und es funktioniert nicht.

Ich habe versucht, die Erweiterung ein- und auszuschalten, und das ändert nichts.

Ich habe versucht, die tatsächliche php_mysqli.dll Datei aus dem 7.0.10 Arbeitsverzeichnis in das Verzeichnis 7.1.4 zu kopieren, und das funktioniert nicht.

bearbeiten

Per Anfrage habe ich Screenshots hinzugefügt, was ist das, was von phpinfo() zeigt. Unter 7.0 sehe ich den Info-Abschnitt für mysqli, und unter 7.1 fehlt der Abschnitt.

enter image description here enter image description here

+0

Ihr ganzes Problem ist ein Tippfehler ( –

+0

Der Fehler, den Sie bekommen haben, war von 'mysql_connect()', aber ich finde es seltsam, dass Sie ein falsches Ergebnis erhalten, wenn Sie überprüfen, ob die 'mysqli_connect()' Funktion existiert. – Qirel

+0

'wp- includes \ wp-db.php 'das, das Teil deines ursprünglichen Pfostens http://stackoverflow.com/revisions/43848269/1 ist, schlägt vor, dass du wordpress verwendest. Möglicherweise hast du irgendeinen übriggebliebenen Code mit mysql_ irgendwo Nach der Änderung haben Sie einen Neustart durchgeführt –

Antwort

3

Hintergrund

Zunächst einmal, ein wenig in die über die Art und Weise, dass WAMPServer php.ini-Dateien verarbeitet. Wenn Sie phpinfo() verwenden, stellen Sie möglicherweise fest, dass der Pfad zu der geladenen Datei iniNICHT die ini-Datei in der PHP-Installation ist. Es zeigt stattdessen auf die Apache-Installation.

enter image description here

Aber wenn man es betrachtet, es ist ein 0KB Symlink. Was ist eigentlich ist ein Link zu einer ini Datei in der PHP-Installation. Aber es ist nicht die php.ini, es zeigt stattdessen auf phpForApache.ini. So folgt aus:

...\wamp64\bin\apache\apache2.4.23\bin\php.ini 

ist eigentlich

...\wamp64\bin\php\php[VERSION]\phpForApache.ini 

So können Sie ignorieren, was in den Apache-Ordner ist und konzentrieren sich auf Ihre ini Dateien in der PHP-Ordner. Sie können jedoch die php.ini nicht ignorieren. Sie müssen beide korrigieren.

Kudos zu Jon Stirling zu empfehlen, die geladene Konfigurationsdatei in phpInfo() zu überprüfen.

Was ich

Did

Ich installierte PHP 7.1 von der PHP-Website, und vergessen, meine ini Dateien aus dem PHP 7.0-Installation über zu übertragen. Ich habe stattdessen die Standard-ini Dateien von der PHP-Website zur Verfügung gestellt.

Das hat nicht funktioniert, weil es in den ini Dateien Tweaks gibt, die benötigt werden, um PHP mit WAMP arbeiten zu lassen. Also kopierte ich die beiden ini Dateien aus meinem 7.0.x Ordner, und dann begann es zu arbeiten, mit Ausnahme des Fehlers mit mysqli.

Root Cause meiner Problem

Nach einer Stunde bei dieser Kratzen, Fred -ii- ‚s last question endlich mich auf die Antwort. Ich hatte PHP versucht, alte Erweiterungsdateien zu referenzieren. Hier ist warum:

Die php.ini Datei und die phpForApache.ini Datei, von WAMP, beide harte Code einige Pfade zur Verfügung gestellt. Zum Beispiel wird die Erweiterungen Ordnerpfad für PHP 7.0.10 wie folgt codiert:

extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/" 

ich die ini Dateien über kopiert hatte, aber sie waren deutete auf den Erweiterungsordner für 7.0. Die Dateien dll für 7.0.x funktionieren nicht mit 7.1.x.

Antwort

ich in die beiden Dateien ging (php.iniphpForApache.ini) in den PHP-7.1.4-Ordnern und ersetzt global alle Instanzen des Textes „7.0.10“ auf „7.1.4“. Und jetzt funktioniert alles.

+0

Cool, ich denke, es ist eine Art von dem, was ich [in diesem Kommentar] erwähnt habe (http://stackoverflow.com/questions/43848269/php-7-1-x-mysql-connect-ist-defined-extension-ist-urned- on? noredirect = 1 # comment74734806_43848269), * ja? * –

+0

Ja tatsächlich. Ich habe auf deinen Kommentar in der Antwort verwiesen. Ich schätze Ihre Hilfe! –

+0

Danke Andy und du bist herzlich willkommen. Ich bin froh zu sehen, dass dies gelöst wurde, * cheers! * –

Verwandte Themen