Maison >cadre php >Swoole >Que faire si l'installation de l'extension swoole échoue

Que faire si l'installation de l'extension swoole échoue

藏色散人
藏色散人original
2020-02-04 15:06:344008parcourir

Que faire si l'installation de l'extension swoole échoue

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 0

En 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.ini

3. fpm

Ce 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn