Was soll ich tun, wenn die Installation der Swoole-Erweiterung fehlschlägt? Ausführliche Erklärung des Swoole-Installationsfehlers
Empfohlenes Lernen: Swoole-Tutorial
Heute habe ich Swoole über Pecl installiert
pecl install swoole
Die Schritte waren sehr Einfach, aber die Installation war am Ende erfolgreich. Später stellte ich fest, dass die swoole-Erweiterung nicht in phpinfo() angezeigt wurde. Ich habe Folgendes ausgeführt:
php -m | grep swoole
und habe den folgenden Fehler gefunden:
PHP-Warnung: PHP-Start: Dynamische Bibliothek „/usr/lib64/php/modules/swoole.so“ kann nicht geladen werden – /usr/lib64/php/modules/swoole.so: undefiniertes Symbol: mysqlnd_find_charset_nr in „Unbekannt“ in Zeile 0
Bei genauer Betrachtung des Fehlerberichts habe ich festgestellt, dass dieser Fehlerbericht durch swoole .so verursacht wird, was darauf hinweist, dass mysqlnd_find_charset_nr beim Laden von swoole.so nicht gefunden wurde. Dies ist ein Schlüsselwort, das mit mysqlnd beginnt. und mysqlnd ist eine Erweiterung von PHP. Durch das Lesen von swoole/swoole.mysql.c haben wir den folgenden Absatz im Quellcode gefunden:
const MYSQLND_CHARSET* cset = mysqlnd_find_charset_nr(client->connector.character_set); if (cset == NULL) { swoole_php_fatal_error(E_ERROR, "unknown mysql charset[%s].", client->connector.character_set); RETURN_FALSE; }
Aus dem obigen Quellcode können wir erkennen, dass sich swoole auf das verlassen muss msyqlnd-Erweiterung. Wir haben festgestellt, dass die msyqlnd-Erweiterung in phpinfo() vorhanden ist.
Schließlich habe ich festgestellt, dass sich die von PHP standardmäßig geladenen Erweiterungen im Verzeichnis /usr/lib64/php/modules/ befinden. Die Konfiguration dieser Erweiterungen befindet sich hier nicht /etc/php.ini, aber im Verzeichnis /etc/php.d/ werden alle .ini-Dateien in diesem Verzeichnis geladen, und unsere Erweiterung=swoole wird geschrieben am Ende der Datei /etc/php.ini, sodass zuerst swoole.so und dann mysqlnd.so geladen wird, was dazu führt, dass swoole mysqlnd_find_charset_nr nicht findet.
Lösung:
1. Löschen Sie die Datei mysqlnd.ini im Verzeichnis /etc/php.d/
2. Fügen Sie extension=mysqlnd.so in der obigen Zeile extension=swoole.so in /etc/php.ini hinzu
3. Starten Sie php-fpm neu
Dadurch wird das Problem gelöst, genau wie Sie Möglicherweise tritt auch der folgende Fehler auf:
PHP-Warnung: PHP-Startup: Die dynamische Bibliothek „/usr/lib64/php/modules/swoole.so“ – /usr/lib64/php/modules kann nicht geladen werden /swoole.so: undefiniertes Symbol: php_sockets_le_socket in Unknown in Zeile 0
Die Lösung ist ähnlich:
1. Ändern Sie /etc/php. Löschen Sie die Sockets .ini-Datei im .d/-Verzeichnis
2. Fügen Sie extension=sockets.so in der Zeile darüber extension=swoole.so in /etc/php.ini hinzu
3. fpm
Das obige ist der detaillierte Inhalt vonWas tun, wenn die Installation der Swoole-Erweiterung fehlschlägt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!