Ten błąd napotkałem po aktualizacji mojej instalacji PHP do wersji 5.5.14 na RedHat EL v6. Zainstalowałem PHP za pomocą menedżera pakietów Yum, a następnie musiałem ponownie zainstalować niektóre rozszerzenia PHP, których używałem. Szukając wskazówek, jak rozwiązać ten problem, natknąłem się na to pytanie, a teraz, gdy znalazłem działające rozwiązanie, chciałem się tutaj podzielić swoimi odkryciami. Inne sugestie, które znalazłem w Internecie, w tym usuwanie i ponowna instalacja PECL / PEAR, a nawet moja instalacja PHP nie rozwiązała tego problemu. Wreszcie po dalszych badaniach i przeglądzie kodu źródłowego PECL / PEAR znalazłem prawdziwą przyczynę. Mam nadzieję, że poniższe informacje przydadzą się innym:
Ten błąd może pojawić się podczas próby uruchomienia PECL, jeśli instalacja PHP nie ma domyślnie włączonej obsługi XML, ale zamiast tego obsługa XML jest zwykle ładowana do instalacji PHP za pośrednictwem modułu rozszerzającego PHP (może to wystąpić, jeśli ./configure --disable-xml
flaga została podana podczas budowania PHP ze źródła lub jeśli zainstalowałeś PHP za pomocą różnych menedżerów pakietów, w których ta wersja PHP jest skonfigurowana do ładowania XML poprzez moduł rozszerzeń).
Zwróć uwagę, jak wygląda ostatni wiersz wyniku błędu z PECL XML Extension not found
- przyczyną tego błędu jest to, że gdy PECL próbuje użyć swojej klasy XMLParser.php, nie udaje mu się, ponieważ nie może uzyskać dostępu do rozszerzenia XML (sprawdza moduł XML za pomocą extension_loaded('xml')
linii wokół 259 źródła XMLParser.php), a ponieważ moduł XML jest niedostępny, nie może przeanalizować plików konfiguracji / ustawień i wyświetla wszystkie pozostałe błędy widoczne powyżej.
Przyczyną tego problemu jest sposób działania PECL. Sama komenda PECL jest po prostu skryptem powłoki, który najpierw sprawdza, gdzie PHP jest instalowany w instalacji systemu, a następnie wywołuje PHP w wierszu poleceń z wieloma flagami, zanim poda ścieżkę do głównego pliku skryptu PECL PHP. Flaga problemu, której używa skrypt powłoki PECL, jest -n
opcją, która nakazuje PHP zignorować dowolne php.ini
pliki (a zatem PHP nie załaduje żadnego z dodatkowych rozszerzeń php.ini
określonych przez plik, w tym w tym przypadku XML).
Wpływ -n
flagi można zobaczyć, uruchamiając następujące dwa polecenia:
- najpierw spróbuj uruchomić
php -m
w wierszu polecenia
- następnie porównaj dane wyjściowe z
php -n -m
Nie powinieneś widzieć rozszerzenia XML na liście po uruchomieniu drugiego polecenia, ponieważ -n
flaga nakazała PHP nie analizować naszych php.ini
plików.
Jeśli uruchomisz vi `which pecl`
w wierszu poleceń, powinieneś zobaczyć zawartość polecenia PECL (jak wspomniano powyżej, to tylko skrypt powłoki), a jeśli przejrzysz ostatni wiersz, zobaczysz coś takiego:
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 "$@"
Powinieneś zobaczyć -n
flagę wymienioną pomiędzy flagami -C
i -q
. Jeśli edytujesz skrypt powłoki PECL, pomijając -n
flagę, powinieneś być w stanie ponownie uruchomić PECL bez problemów.
Alternatywnie można ponownie skompilować PHP ze źródła, upewniając się, że moduł XML jest skompilowany do pliku binarnego PHP, zamiast być ładowanym z modułu rozszerzającego PHP w czasie wykonywania. Oczywiście edytowanie skryptu powłoki PECL w celu usunięcia -n
flagi naprawi problem tylko do momentu ponownej instalacji PECL / PEAR, ale mam nadzieję, że opiekunowie PECL / PEAR mogą zaktualizować swoje repozytorium za pomocą tej poprawki. Zapewnienie, że PHP jest wbudowane ze skompilowaną obsługą XML, jest jednak długoterminowym rozwiązaniem tego rozwiązania, ale może nie być idealne w każdych okolicznościach.
Dla kompletności, jeśli uruchomisz vi `which pear`
, zobaczysz bardzo podobny skrypt powłoki do tego, którego używa PECL, jednak -n
brakuje flagi w poleceniu wywołującym PHP i jako takie polecenie PEAR nie podlega tym samym problemom.
/usr/bin/pecl
aby nie używać parametru -n.sed -i "$ s|\-n||g" /usr/bin/pecl
-n
ostatniego polecenia,pecl
a długa lista błędów pozostaje niestetyWłaśnie napotkałem ten problem na Ubuntu, kiedy zadzwoniłem po polecenie PECL. Jedyną rzeczą, która pomogła mi, jest instalacja
php-xml
pakietu. Najpierw sprawdź, czy masz już zainstalowany moduł XMLJeśli go nie znajdziesz, musisz to zrobić
automatycznie zainstaluje pakiet php-xml. lub możesz po prostu zainstalować xml w ten sposób (w zależności od posiadanej wersji php)
Jeśli znajdziesz xml, usuń go i zainstaluj ponownie
Jeśli masz RPM jako menedżer pakietów, możesz użyć
yum install php-xml
iyum remove php-xml
źródło
Używam php5.6.
Wiele odpowiedzi zaleca zainstalowanie php-xml, ale nie działa ono dla mnie, gdy piszę konkretną wersję
i wszystko działa, może pomoże innym.
źródło
sudo apt install php7.2-xml
. Możesz zaktualizować odpowiedź,musisz zainstalować pakiet php-xml, aby naprawić problem „Nie znaleziono rozszerzenia XML”
źródło
php7.2
i nie edytowałem żadnych plików, tylko zainstalowałem moją wersję względną za pomocą poleceniasudo apt-get install php7.2-xml
Usuń całkowicie PEAR RPM, a
rm -rf /usr/share/pear/
następnie ponownie zainstaluj gruszkę i wszystkie moduły.źródło
yum erase php-pear
i teraz wszystko jest w porządku! Dzięki! :)yum erase php-pear
2.rm -rf /usr/share/pear/
3.yum install php54w-pear
Poniższe kroki działają dla mnie.
1 krok:
2 krok:
3 krok:
źródło
Ludzie PHP7 / Debian (podobny / ten sam powód):
Powodem tego jest, jak wspomniano powyżej, brakujące rozszerzenie XML. Moszcz z nas wykorzysta dotdeb i usunęliśmy xml przed build-in do bycia osobny pakiet:
źródło: https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/
To znaczy że
php -n
nie będzie już zawierać xml, od którego zależy analizator pakietów PEAR (analizator XML). Źródło pear.php.net/package/PEAR/download
Ponieważ jest bardzo ważne, aby pecl nie używał php.ini systemu, aby zagwarantować funkcjonalność we wszystkich przypadkach (nawet jeśli niefunkcjonalność jest powodem uruchomienia pecl ..) nie zmieni się przy użyciu -n .. raczej faceci dotdeb potrzebują aby w końcu przestać przepakowywać, restrukturyzować i przenosić pakiety wokół, nawet nie testując go lekko.
Występuje również problem z dostarczonym pakietem PEAR, który należy zaktualizować o ... nie wolno publikować niczego innego z powodu obecnej reputacji
źródło