Je suis tombé sur cette erreur après la mise à jour de mon installation PHP vers 5.5.14 sur RedHat EL v6. J'avais installé PHP via le gestionnaire de paquets Yum, puis j'avais besoin de réinstaller certaines des extensions PHP que j'utilisais. En cherchant des conseils sur la façon de résoudre ce problème, je suis tombé sur cette question et, maintenant que j'ai découvert une solution efficace, je souhaitais partager mes conclusions ici. D’autres suggestions que j’avais trouvées en ligne et qui comprenaient l’effacement et la réinstallation de PECL / PEAR et même mon installation de PHP ne résolvaient pas ce problème. Enfin, après quelques recherches supplémentaires et une révision du code source de PECL / PEAR, j’ai trouvé la véritable cause. Espérons que ce qui suit sera utile aux autres:
Vous pouvez voir cette erreur lorsque vous tentez d'exécuter PECL si XML n'est pas activé par défaut sur votre installation PHP. Toutefois, le support XML est généralement chargé dans votre installation PHP via un module d'extension PHP (ceci peut se produire si l' ./configure --disable-xml
indicateur a été spécifié lors de la construction de PHP depuis les sources, ou si vous avez installé PHP via différents gestionnaires de paquets où cette version de PHP est configurée pour charger XML via un module d’extension).
Notez que la dernière ligne de la sortie d'erreur de PECL est XML Extension not found
- la raison de cette erreur est due au fait que lorsque PECL essaie d'utiliser sa classe XMLParser.php, il échoue car il ne peut pas accéder à l'extension XML (il recherche le module XML à l'aide extension_loaded('xml')
de 259 de la source XMLParser.php) et, le module XML n'étant pas disponible, il ne peut pas analyser ses fichiers de configuration / paramètres et génère toutes les autres erreurs décrites ci-dessus.
La raison pour laquelle ce problème se produit est due à la façon dont PECL fonctionne. La commande PECL elle-même est juste un script shell, qui détermine d’abord où PHP est installé sur votre installation système, puis appelle PHP sur la ligne de commande avec un certain nombre d’indicateurs avant de fournir le chemin du fichier de script PHP PECL principal. Le problème avec lequel le script shell PECL utilise est l' -n
option, qui indique à PHP d'ignorer tous les php.ini
fichiers (et par conséquent, PHP ne chargera aucune des extensions supplémentaires php.ini
spécifiées par votre fichier, y compris XML).
On peut voir l'impact de l' -n
indicateur en lançant les deux commandes suivantes:
- d'abord essayer de courir
php -m
sur la ligne de commande
- puis comparer la sortie à
php -n -m
Vous ne devez pas voir l'extension XML répertoriée lorsque vous exécutez la deuxième commande, car l' -n
indicateur a dit à PHP de ne pas analyser nos php.ini
fichiers.
Si vous exécutez vi `which pecl`
sur la ligne de commande, vous devriez voir le contenu de la commande PECL (comme indiqué ci-dessus, c'est juste un script shell), et si vous inspectez la dernière ligne, vous verrez quelque chose comme ceci:
exec $PHP -C -n -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@"
Vous devriez voir le -n
drapeau énuméré entre les drapeaux -C
et -q
. Si vous éditez le script de shell PECL, en omettant l' -n
indicateur, vous devriez maintenant pouvoir réexécuter PECL sans problème.
Vous pouvez également recompiler PHP à partir des sources en vous assurant que le module XML est compilé dans le binaire PHP au lieu d'être chargé à partir d'un module d'extension PHP au moment de l'exécution. Évidemment, éditer le script de shell PECL pour supprimer l' -n
indicateur ne résoudra le problème que jusqu'à ce que PECL / PEAR soit réinstallé. Toutefois, les responsables de PECL / PEAR peuvent mettre à jour leur rapport avec ce correctif. S'assurer que PHP est construit avec le support XML compilé dans, est cependant un correctif à long terme pour la solution, mais peut ne pas être idéal pour toutes les circonstances.
Pour être complet, si vous exécutez, vi `which pear`
vous verrez un script shell très similaire à celui utilisé par PECL. Toutefois, l' -n
indicateur est absent de la commande qui appelle PHP et, en tant que telle, la commande PEAR n'est pas soumise à ces mêmes problèmes.
/usr/bin/pecl
pour ne pas utiliser le paramètre -n.sed -i "$ s|\-n||g" /usr/bin/pecl
-n
la dernière commande depecl
et la longue liste d'erreurs reste malheureusementJ'ai juste fait face à ce problème sur Ubuntu quand j'ai appelé pour la commande PECL. La seule chose qui m'a aidé est d'installer le
php-xml
paquet. Commencez par vérifier si le module XML est déjà installé avecSi vous ne le trouvez pas, alors vous devez
il installera automatiquement le paquet php-xml. ou vous pouvez simplement installer xml comme ceci (selon la version de php que vous avez)
Si vous trouvez xml alors vous devez le supprimer et le réinstaller
Si vous avez RPM en tant que gestionnaire de paquets, vous pouvez utiliser
yum install php-xml
etyum remove php-xml
la source
Im en utilisant PHP5.6.
Beaucoup de réponses recommandent d'installer php-xml, mais ça ne marche pas pour moi, quand je tape une version spécifique comme
et tout fonctionne, peut-être que cela aidera les autres.
la source
sudo apt install php7.2-xml
. Vous pouvez mettre à jour la réponse pour inclure également ma commande si vous le souhaitez :) mercivous devez installer le paquet php-xml pour corriger le problème "Extension XML introuvable"
la source
php7.2
et je n’ai pas édité de fichiers venant d’installer ma version relative à l’aide de la commandesudo apt-get install php7.2-xml
Supprimez complètement les RPM PEAR, puis
rm -rf /usr/share/pear/
réinstallez pear et tous vos modules.la source
yum erase php-pear
et maintenant tout va bien! Merci! :)yum erase php-pear
2.rm -rf /usr/share/pear/
3.yum install php54w-pear
Les étapes suivantes fonctionnent pour moi.
1 étape:
2 étapes:
3 étapes:
la source
Personnes PHP7 / Debian (similaire / même raison):
La raison en est, comment, mentionnons plus haut, l’extension XML manquante. Doit d’entre nous utiliserons dotdeb , et ils ont supprimé le code XML de l’ installation en tant que paquet séparé:
source: https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/
Cela signifie que
php -n
n'inclura plus xml, dont dépend l'analyseur de paquets PEAR (analyseur XML). Source pear.php.net/package/PEAR/download
Comme il est essentiel pour pecl de ne pas utiliser php.ini du système, pour garantir la fonctionnalité dans tous les cas (même si le dysfonctionnement est la raison pour laquelle vous exécutez pecl ..), il ne changera pas avec -n .. pour enfin arrêter le reconditionnement, la restructuration et le transfert des paquets sans même le tester légèrement.
Il existe également un problème avec le package PEAR livré, qui doit être mis à niveau avec ... ne pas être autorisé à publier quoi que ce soit en raison de la réputation actuelle.
la source