Que dois-je faire si l'installation de l'extension swoole échoue ? Explication détaillée de l'erreur d'installation de swoole
Apprentissage recommandé : Tutoriel swoole
Aujourd'hui, j'ai installé swoole via pecl
pecl install swoole
Les étapes étaient très simple, mais l'installation a finalement réussi. Plus tard, j'ai découvert que l'extension swoole n'était pas affichée dans phpinfo(). J'ai exécuté :
php -m | grep swoole
et j'ai trouvé l'erreur suivante :
Avertissement PHP : Démarrage PHP : Impossible de charger la bibliothèque dynamique '/usr/lib64/ php/modules/swoole.so' - /usr/lib64/php/modules/swoole.so : symbole non défini : mysqlnd_find_charset_nr dans Inconnu à la ligne 0En regardant attentivement le rapport d'erreur, j'ai découvert que ce rapport d'erreur est causé par swoole .so, indiquant que mysqlnd_find_charset_nr n'est pas trouvé lors du chargement de swoole.so. Il s'agit d'un mot-clé commençant par mysqlnd, et mysqlnd est une extension de PHP. En lisant swoole/swoole.mysql.c Nous avons trouvé le paragraphe suivant dans le code source :
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; }À partir du code source ci-dessus, nous pouvons voir que swoole doit s'appuyer sur le Extension msyqlnd. Nous avons constaté que l'extension msyqlnd existe dans phpinfo(). Pourquoi cela est-il signalé ? Enfin, j'ai constaté que les extensions chargées par PHP par défaut se trouvent dans le répertoire /usr/lib64/php/modules/. Les fichiers .so ici sont chargés par défaut. La configuration de ces extensions n'y est pas. /etc/ php.ini, mais dans le répertoire /etc/php.d/ Tous les fichiers .ini de ce répertoire sont chargés après le chargement de /etc/php.ini, et notre extension=swoole est écrite. à la fin du fichier /etc/php.ini, donc swoole.so est chargé en premier, puis mysqlnd.so, ce qui empêche swoole de trouver mysqlnd_find_charset_nr.
Solution :
1. Supprimez le fichier mysqlnd.ini dans le répertoire /etc/php.d/ 2. Ajoutez extension=mysqlnd.so dans la ligne ci-dessus extension=swoole.so dans /etc/php.ini 3 Redémarrez php-fpm Cela résoudra le problème, pareil. peut également rencontrer l'erreur suivante :Avertissement PHP : Démarrage PHP : Impossible de charger la bibliothèque dynamique '/usr/lib64/php/modules/swoole.so' - /usr/lib64/php/ modules /swoole.so : symbole non défini : php_sockets_le_socket dans Inconnu sur la ligne 0
La solution est similaire :
Modifiez /etc/php Supprimez les sockets. .ini dans le répertoire .d/2. Ajoutez extension=sockets.so dans la ligne ci-dessus extension=swoole.so dans /etc/php.ini3. fpmCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!