58 votes

La commande PECL produit une longue liste d'erreurs

Actuellement en cours d'exécution de PHP 5.4 sur CentOS 6.5.

J'ai installé le package webtatic php55w puis installé PEAR+PECL sans problème ainsi que redis et mongo via PECL.

Peu de temps après, j'ai réalisé que la version 5.5 n'est pas compatible avec le framework avec lequel je travaillais, alors j'ai supprimé php55w avec yum et installé à la place php54w.

Maintenant, la commande pecl ne fonctionne pas du tout. Elle produit simplement cette longue série d'erreurs à chaque fois que j'exécute une commande pecl (abréviée... la plupart se répètent des dizaines de fois) :

Avertissement : Argument invalide fourni pour foreach() dans Command.php à la ligne 259

Avertissement : Argument invalide fourni pour foreach() dans /usr/share/pear/PEAR/Command.php à la ligne 259

...etc etc etc...

Avis : Index non défini : honorsbaseinstall dans Role.php à la ligne 180

Avis : Index non défini : honorsbaseinstall dans Role.php à la ligne 180

...etc etc etc...

Avis : Index non défini : installable dans Role.php à la ligne 145

Avis : Index non défini : installable dans Role.php à la ligne 145

...etc etc etc...

Avis : Index non défini : phpfile dans Role.php à la ligne 212

Avis : Index non défini : phpfile dans Role.php à la ligne 212

...etc etc etc...

Avis : Index non défini : config_vars dans Role.php à la ligne 49

Avis : Index non défini : config_vars dans Role.php à la ligne 49

...etc etc etc...

Avertissement : Argument invalide fourni pour foreach() dans PEAR/Command.php à la ligne 259

Avertissement : Argument invalide fourni pour foreach() dans /usr/share/pear/PEAR/Command.php à la ligne 259

...etc etc etc...

Extension XML non trouvée

Comment puis-je résoudre ce problème?

102voto

Jason Han Points 101

J'ai rencontré cette erreur après avoir mis à jour mon installation PHP en version 5.5.14, sur RedHat EL v6. J'avais installé PHP via le gestionnaire de paquets Yum, puis j'ai dû 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 qui fonctionne, je voulais partager mes découvertes ici. D'autres suggestions trouvées en ligne, telles que l'effacement et la réinstallation de PECL/PEAR ainsi que de mon installation PHP, n'ont pas résolu ce problème. Enfin, après des recherches supplémentaires et avoir examiné le code source de PECL/PEAR, j'ai trouvé la vraie cause. Espérons que ce qui suit sera utile à d'autres:

Vous pouvez rencontrer cette erreur lorsque vous essayez d'exécuter PECL si votre installation PHP n'a pas XML activé par défaut, mais plutôt le support XML est généralement chargé dans votre installation PHP via un module d'extension PHP (cela pourrait se produire si le drapeau ./configure --disable-xml a été spécifié lors de la construction de PHP à partir des sources, ou si vous avez installé PHP via divers gestionnaires de paquets où la version de PHP est configurée pour charger XML via un module d'extension).

Remarquez comment la dernière ligne de la sortie d'erreur de PECL est Extension XML non trouvée - la raison de cette erreur est que lorsque PECL tente d'utiliser sa classe XMLParser.php, cela échoue car il ne peut pas accéder à l'extension XML (il vérifie la présence du module XML en utilisant extension_loaded('xml') vers la ligne 259 du code source de XMLParser.php), et parce que le module XML est indisponible, il ne peut pas analyser ses fichiers de configuration/réglages et affiche toutes les autres erreurs vues ci-dessus.

La raison pour laquelle ce problème se produit est due à la façon dont PECL fonctionne. La commande PECL est simplement un script shell, qui détermine d'abord où PHP est installé sur votre système, puis appelle PHP en ligne de commande avec plusieurs drapeaux avant de fournir le chemin vers le script PHP principal de PECL. Le drapeau problématique utilisé par le script shell PECL est l'option -n, qui indique à PHP d'ignorer tout fichier php.ini (et donc PHP ne chargera pas les extensions supplémentaires spécifiées dans votre fichier php.ini, y compris dans ce cas, XML).

On peut voir l'impact du drapeau -n en exécutant les deux commandes suivantes:

  • essayez d'abord d'exécuter php -m en ligne de commande
  • puis comparez la sortie à php -n -m

Vous ne devriez pas voir l'extension XML répertoriée lorsque vous exécutez la deuxième commande car le drapeau -n indique à PHP de ne pas analyser nos fichiers php.ini.

Si vous exécutez vi `which pecl` en ligne de commande, vous devriez voir le contenu de la commande PECL (comme indiqué ci-dessus, il s'agit simplement d'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 drapeau -n répertorié entre les drapeaux -C et -q. Si vous modifiez le script shell PECL en omettant le drapeau -n, vous devriez maintenant pouvoir exécuter PECL à nouveau sans problème.

Alternativement, vous pouvez 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. Bien sûr, modifier le script shell PECL pour supprimer le drapeau -n ne résoudra le problème que jusqu'à ce que PECL/PEAR soit réinstallé, cependant, espérons que les mainteneurs de PECL/PEAR pourront mettre à jour leur dépôt avec cette correction. S'assurer que PHP est construit avec le support XML compilé, est cependant une solution à long terme au problème, mais peut ne pas être idéale pour les circonstances de chacun.

Juste pour plus de complétude, si vous exécutez vi `which pear`, vous verrez un script shell très similaire à celui que PECL utilise, cependant, le drapeau -n est manquant de la commande qui appelle PHP et en tant que tel, la commande PEAR n'est pas sujette à ces mêmes problèmes.

7 votes

Réponse épique, en éditant le script pecl ça a marché pour moi.

31 votes

Vous monsieur ... êtes un saint. ... ... littéralement. Je vais écrire un script qui analyse les nécrologies de tous les journaux, et dès que vous décédez, je vais dire au Vatican de commencer le processus de béatification, en utilisant cette réponse comme exemple de vos actes sur terre. Super réponse :)

5 votes

Merci. TLDR; modifiez la dernière ligne de /usr/bin/pecl pour ne pas utiliser le paramètre -n.

39voto

Taha EL BOUFFI Points 441

J'ai rencontré ce problème sur Ubuntu lorsque j'ai appelé la commande PECL. La seule chose qui m'a aidé est d'installer le paquet php-xml. Vérifiez d'abord si le module XML est déjà installé avec

php -m

Si vous ne le trouvez pas, alors vous devez

sudo apt-get install php-pear

cela installera automatiquement le paquet php-xml. Ou vous pouvez simplement installer xml de cette manière (selon la version de php que vous avez)

sudo apt-get install php-xml php7.0-xml

Si vous trouvez xml alors vous devez le supprimer et le réinstaller

sudo apt-get purge php*-xml
sudo apt-get autoremove php*-xml
sudo apt-get install php-xml php7.0-xml

Si vous avez RPM en tant que gestionnaire de paquets, vous pouvez utiliser yum install php-xml et yum remove php-xml

1 votes

Php-xml php7.0-xml sont installés mais le module XML n'est pas ici

1 votes

Brillante réponse, cela m'a aidé

1 votes

+1 de ma part, pour la version php 8.2 vous pouvez utiliser sudo apt-get install php-xml php8.2-xml

8voto

Je utilise php5.6.

De nombreuses réponses recommandent d'installer php-xml, mais cela ne fonctionne pas pour moi, lorsque je tape une version spécifique comme

sudo apt-get install php5.6-xml

et tout fonctionne, cela pourrait peut-être aider d'autres personnes.

0 votes

Travaille pour php 5.6

0 votes

A bien fonctionné pour moi en php 7.2, Ubuntu 16.04. Ma commande était: sudo apt install php7.2-xml. Vous pouvez mettre à jour la réponse pour inclure également ma commande si vous le souhaitez :) merci

4voto

kavehmb Points 141

Vous devez installer le package php-xml afin de résoudre le problème "Extension XML non trouvée"

2 votes

Un peu plus d'explication pourrait être utile ici.

0 votes

Veuillez noter que cette question a presque 2 ans. Essayez d'éviter de répondre aux questions anciennes car cela encombre l'écran d'accueil.

1 votes

La raison pour laquelle j'ai répondu est que j'ai rencontré ce problème aujourd'hui et que cette solution a résolu mon problème!

2voto

Florin Asăvoaie Points 6854

Supprimez complètement tous les RPMs PEAR, puis rm -rf /usr/share/pear/ puis réinstallez PEAR ainsi que tous vos modules.

0 votes

Suivi de yum effacer php-pear et maintenant tout va bien! Merci! :)

1 votes

Veuillez noter l'utilisation de la version php54w de php pear lors de la réinstallation (au lieu du package php-pear d'origine). Donc en bref 1. yum erase php-pear 2. rm -rf /usr/share/pear/ 3. yum install php54w-pear

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X