Heim > PHP-Framework > Swoole > Was tun, wenn die Installation der Swoole-Erweiterung fehlschlägt?

Was tun, wenn die Installation der Swoole-Erweiterung fehlschlägt?

藏色散人
Freigeben: 2020-02-04 15:06:34
Original
3953 Leute haben es durchsucht

Was tun, wenn die Installation der Swoole-Erweiterung fehlschlägt?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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;
 
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage