Frage Der PECL-Befehl erzeugt eine lange Liste von Fehlern


Derzeit läuft PHP 5.4 auf CentOS 6.5.

Ich habe das Paket webtatic php55w installiert und dann PEAR + PECL ohne Probleme zusammen mit redis und mongo über PECL installiert.

Kurz darauf stellte ich fest, dass 5.5 nicht mit dem Framework kompatibel ist, mit dem ich arbeitete, also löschte ich php55w und installierte php54w an seinem Platz.

Jetzt funktioniert der Befehl pecl überhaupt nicht. Es erzeugt nur diese wirklich lange Reihe von Fehlern jedes Mal, wenn ich einen pecl-Befehl absetze (abgekürzt ... am häufigsten dutzende Male wiederholt):

Warning: Invalid argument supplied for foreach() in Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

...etc etc etc...

Notice: Undefined index: honorsbaseinstall in Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180

...etc etc etc...

Notice: Undefined index: installable in Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145

...etc etc etc...

Notice: Undefined index: phpfile in Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212

...etc etc etc...

Notice: Undefined index: config_vars in Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49

...etc etc etc...

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

...etc etc etc...

XML Extension not found

Wie kann ich das beheben?


37
2018-04-18 03:32


Ursprung




Antworten:


Ich bin auf diesen Fehler gestoßen, nachdem ich meine PHP-Installation auf RedHat EL v6 auf 5.5.14 aktualisiert habe. Ich hatte PHP über den Yum-Paketmanager installiert und musste dann einige der von mir verwendeten PHP-Erweiterungen neu installieren. Bei der Suche nach Tipps, wie ich dieses Problem lösen kann, bin ich auf diese Frage gestoßen. Jetzt, da ich eine funktionierende Lösung gefunden habe, wollte ich meine Ergebnisse hier teilen. Andere Vorschläge, die ich online gefunden hatte, darunter das Löschen und erneute Installieren von PECL / PEAR und sogar meine PHP-Installation, haben dieses Problem nicht gelöst. Nach einigen weiteren Recherchen und der Überprüfung des Quellcodes für PECL / PEAR fand ich schließlich die wahre Ursache. Hoffentlich wird das Folgende anderen helfen:

Dieser Fehler tritt möglicherweise auf, wenn Sie versuchen, PECL auszuführen, wenn Ihre PHP-Installation nicht standardmäßig XML aktiviert hat, sondern die XML-Unterstützung normalerweise über ein PHP-Erweiterungsmodul in Ihre PHP-Installation geladen wird (dies kann auftreten, wenn ./configure --disable-xml flag wurde angegeben, wenn PHP aus der Quelle erstellt wird, oder wenn Sie PHP über verschiedene Paketmanager installiert haben, wobei dieser Build von PHP so konfiguriert ist, dass er XML über ein Erweiterungsmodul lädt.

Beachten Sie, wie die letzte Zeile der Fehlerausgabe von PECL ist XML Extension not found - Der Grund für diesen Fehler liegt darin, dass PECL, wenn er versucht, seine XMLParser.php-Klasse zu verwenden, fehlschlägt, weil er nicht auf die XML-Erweiterung zugreifen kann (er sucht mit XML nach dem XML-Modul) extension_loaded('xml') Um Zeile 259 der XMLParser.php-Quelle), und weil das XML-Modul nicht verfügbar ist, kann es seine Konfigurations- / Einstellungsdateien nicht analysieren und gibt alle anderen oben genannten Fehler aus.

Der Grund für dieses Problem liegt in der Funktionsweise von PECL. Der PECL-Befehl selbst ist lediglich ein Shell-Skript, das zuerst herausfindet, wo PHP auf Ihrer Systeminstallation installiert ist, und dann PHP in der Befehlszeile mit einer Reihe von Flags aufruft, bevor der Pfad zur Haupt-PECL-PHP-Skriptdatei angegeben wird. Das Problem-Flag, das das PECL-Shell-Skript verwendet, ist das -n Option, die PHP anweist, alle zu ignorieren php.ini Dateien (und deshalb wird PHP keine der zusätzlichen Erweiterungen laden php.ini Datei spezifiziert, einschließlich in diesem Fall XML).

Man kann die Auswirkungen der -n Markieren Sie, indem Sie die folgenden zwei Befehle ausführen:

  • Versuchen Sie zuerst, zu laufen php -m in der Befehlszeile
  • Vergleichen Sie dann den Ausgang mit php -n -m

Die XML-Erweiterung sollte nicht angezeigt werden, wenn Sie den zweiten Befehl ausführen, da der -nFlag hat PHP gesagt, dass er unser nicht analysieren soll php.ini Datei (en).

Wenn du läufst vi `which pecl` In der Befehlszeile sollten Sie den Inhalt des PECL-Befehls sehen (wie oben erwähnt, es ist nur ein Shell-Skript), und wenn Sie die letzte Zeile untersuchen, sehen Sie etwa Folgendes:

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 "$@"

Du solltest das sehen -n Flagge zwischen den -C und -q Flaggen. Wenn Sie das PECL-Shell-Skript bearbeiten, können Sie das -n Sie sollten jetzt in der Lage sein, PECL erneut ohne Probleme auszuführen.

Alternativ können Sie PHP aus der Quelldatei kompilieren, indem Sie sicherstellen, dass das XML-Modul in die PHP-Binärdatei kompiliert wird, anstatt es zur Laufzeit aus einem PHP-Erweiterungsmodul zu laden. Offensichtlich Bearbeiten des PECL-Shell-Skripts zum Entfernen der -n flag wird das Problem nur beheben, bis PECL / PEAR erneut installiert wird. Hoffentlich können jedoch die Betreuer von PECL / PEAR ihren Repo mit diesem Fix aktualisieren. Sicherzustellen, dass PHP mit eingebauter XML-Unterstützung erstellt wird, stellt jedoch eine langfristige Lösung für die Lösung dar, ist jedoch unter Umständen nicht ideal für alle.

Nur der Vollständigkeit halber, wenn Sie laufen vi `which pear` Sie werden ein sehr ähnliches Shell-Skript sehen wie PECL -n flag fehlt in dem Befehl, der PHP aufruft und daher unterliegt der PEAR-Befehl nicht denselben Problemen.


81
2017-07-11 22:58



Epische Antwort, das Bearbeiten des Pecl-Skripts funktionierte für mich. - Alex Ross
Sie Sir ... sind ein Heiliger. ... buchstäblich. Ich werde ein Skript schreiben, das die Todesanzeigen jeder Zeitung scannt, und sobald Sie sterben, werde ich dem Vatikan den Seligsprechungsprozess erklären und diese Antwort als Beispiel für Ihre Taten auf der Erde verwenden. Tolle Antwort :) - riwalk
Vielen Dank. TLDR; bearbeite die letzte Zeile von /usr/bin/pecl den Parameter -n nicht verwenden. - dtbarne
Lauf sed -i "$ s|\-n||g" /usr/bin/pecl - AVProgrammer
Ich habe es nicht -n im letzten Befehl von pecl und die lange Fehlerliste bleibt leider bestehen - whiteletters in blankpapers


Ich habe gerade dieses Problem auf Ubuntu konfrontiert, als ich nach PECL-Befehl rief. Das einzige, was mir geholfen hat, ist zu installieren php-xml Paket. Überprüfen Sie zunächst, ob das XML-Modul bereits installiert ist

php -m

Wenn Sie es nicht finden, müssen Sie es tun

sudo apt-get install php-pear

Es wird automatisch das php-xml Paket installieren. oder du kannst einfach xml so installieren (abhängig von der Version von PHP, die du hast)

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

Wenn Sie xml finden, müssen Sie es entfernen und neu installieren

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

Wenn Sie RPM als Paketmanager haben, können Sie verwenden yum install php-xml und yum remove php-xml


19
2018-04-11 13:32



php-xml php7.0-xml sind installiert, aber XML Modul ist nicht hier - Loenix


Ich benutze PHP5.6.

Viele Antworten empfehlen, php-xml zu installieren, aber es funktioniert nicht für mich, wenn ich bestimmte Version wie

sudo apt-get install php5.6-xml

und alles funktioniert, vielleicht wird es anderen helfen.


5
2018-03-23 16:20



funktioniert für PHP 5.6 - devst3r


Sie müssen das PHP-XML-Paket installieren, um das Problem "XML-Erweiterung nicht gefunden" zu beheben


3
2018-02-24 17:38



Ein bisschen mehr Erklärung könnte hier nützlich sein. - kasperd
Bitte beachten Sie, dass diese Frage fast 2 Jahre alt ist. Versuchen Sie zu vermeiden, alte Fragen zu beantworten, da es den Startbildschirm überfüllt. - Catherine MacInnes
Der Grund, warum ich darauf geantwortet habe, war, dass ich heute auf dieses Problem gestoßen bin und diese Lösung mein Problem gelöst hat! - kavehmb
das ist das einzige was wir tun mussten, wie ich es benutze php7.2 und ich habe keine Dateien bearbeitet nur meine relative Version mit Befehl installiert sudo apt-get install php7.2-xml - Muhammad Omer Aslam


Entfernen Sie alle PEAR-RPMs vollständig rm -rf /usr/share/pear/ dann installiere Pear wieder und alle deine Module.


2
2018-04-18 08:28



Gefolgt von dem mit yum erase php-pear und jetzt ist alles gut! Vielen Dank! :) - eComEvo
Bitte beachten Sie bei der Neuinstallation die php54w Version von php pear (anstelle des php-pear Pakets). Also kurz 1.yum erase php-pear 2. rm -rf /usr/share/pear/ 3. yum install php54w-pear - Attila Fulop


Die folgenden Schritte funktionieren für mich.

1 Schritt:

yum erase php-pear

2 Schritt:

# rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

3 Schritt:

 yum install --enablerepo=remi --enablerepo=remi-php56 php-pear

2
2018-06-23 10:45





PHP7 / Debian Leute (ähnlich / gleicher Grund):

Der Grund dafür ist, wie oben erwähnt, die fehlende XML-Erweiterung. Muss von uns benutzen Dotdeb, und die haben xml aus dem Sein entfernt eingebaut ein separates Paket sein:

Quelle: https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/ 

Bitte beachten Sie auch, dass bcmatch, dba, mbstring, Seife, XML und zip haben jetzt ihre eigenen dedizierten Pakete.

Das bedeutet, dass

php -n

enthält keine XML mehr, von der der PEAR-Paketparser abhängt (XML-Parser). Quelle pear.php.net/package/PEAR/download

PHP-Erweiterung: XML

Da es wichtig ist, php.ini des Systems nicht zu benutzen, um die Funktionsfähigkeit in allen Fällen zu garantieren (auch wenn die Funktionsstörung der Grund dafür ist, dass Sie pecl laufen lassen), ändert sich nichts mit -n .. eher die Dotdeb-Leute brauchen endlich aufhören, neue Pakete neu zu verpacken, zu restrukturieren und zu verschieben, ohne sie auch nur ein bisschen zu testen.

Es gibt auch ein Problem mit dem verschickten PEAR-Paket, das aktualisiert werden muss mit ... aufgrund der aktuellen Reputation darf nichts mehr gepostet werden


0
2018-06-26 06:03