Я наткнулся на эту ошибку после обновления моей установки PHP до версии 5.5.14, на RedHat EL v6. Я установил PHP через менеджер пакетов Yum, а затем мне нужно было переустановить некоторые расширения PHP, которые я использовал. В поисках советов, как решить эту проблему, я наткнулся на этот вопрос, и теперь, когда я нашел работающее решение, я хотел бы поделиться своими выводами здесь. Другие предложения, которые я нашел в интернете, включая удаление и переустановку PECL/PEAR и даже моя установка PHP не решила эту проблему. Наконец, после некоторых дальнейших исследований и просмотра исходного кода PECL/PEAR я нашел настоящую причину. Надеюсь, что следующее поможет другим:
Вы можете увидеть эту ошибку при попытке запуска PECL, если в вашей установке PHP по умолчанию не включен XML, но вместо этого в установку PHP обычно загружается поддержка XML через модуль расширения PHP (это может произойти, если при сборке PHP из исходников был указан флаг ./configure --disable-xml
, или если вы устанавливали PHP через различные менеджеры пакетов, в которых эта сборка PHP настроена на загрузку XML через модуль расширения).
Обратите внимание, что последняя строка ошибки, выводимая из PECL - XML Extension not found
- причина появления этой ошибки в том, что когда PECL пытается использовать свой класс XMLParser.php, он терпит неудачу, так как не может получить доступ к XML расширению (он проверяет XML модуль, используя extension_loaded('xml')
вокруг строки 259 XMLParser). php), и поскольку XML-модуль недоступен, он не может разобрать свои файлы конфигурации/настроек и выдать все остальные ошибки, рассмотренные выше.
Причина, по которой возникает эта проблема, заключается в том, как работает PECL. Команда PECL сама по себе является просто shell-скриптом, который сначала работает там, где установлен PHP, а затем вызывает PHP в командной строке с рядом флагов, прежде чем указать путь к основному файлу PECL PHP-скрипта. Флаг проблемы, который использует скрипт PECL shell - это опция -n
, которая говорит PHP игнорировать любые php.ini
файлы (и поэтому PHP не загрузит ни одно из дополнительных расширений, указанных в вашем php.ini
файле, включая в данном случае XML). Влияние флага -n
можно увидеть, выполнив следующие две команды:
-m
в командной строке php -n -m
При запуске второй команды не должно быть XML расширения, так как флаг -n
говорит PHP не разобрать наш php. ini
file(s).
Если вы запустите vi `which pecl`
в командной строке, вы должны увидеть содержимое команды PECL (как было отмечено выше, это просто скрипт оболочки), и если вы посмотрите последнюю строку, вы увидите что-то вроде:
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 "$@"
Флаг -n
расположен между флагами -C
и -q
. Если вы отредактируете скрипт оболочки PECL, опустив флаг -n
, то теперь вы сможете снова запускать PECL без проблем.
Кроме того, вы можете перекомпилировать PHP из исходников, убедившись, что модуль XML скомпилирован в бинарный файл PHP, а не загружен из модуля расширения PHP во время выполнения. Очевидно, что редактирование скрипта оболочки PECL для удаления флага -n
исправит проблему только до тех пор, пока PECL/PEAR не будет переустановлен, однако, надеемся, что мейнтейнеры PECL/PEAR смогут обновить свои репозитории с помощью этого исправления. Обеспечение сборки PHP с скомпилированной поддержкой XML, однако, является долгосрочным решением проблемы, но может быть не идеальным для всех обстоятельств.
Просто для полноты, если вы запустите vi `which pear`
, вы увидите очень похожий скрипт оболочки на тот, который использует PECL, однако - -флаг n
отсутствует в команде, вызывающей PHP, и поэтому команда PEAR не подвержена этим же проблемам.
Полностью удалите все RPM PEAR, затем rm -rf / usr / share / pear /
, затем снова установите pear и все ваши модули.
Для меня работают следующие шаги.
1 шаг:
yum erase php-pear
2 шаг:
# 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 шаг:
yum install --enablerepo=remi --enablerepo=remi-php56 php-pear
вам необходимо установить пакет php-xml, чтобы исправить проблему «XML Extension not found»
Я только что столкнулся с этой проблемой в ubuntu, когда я вызвал команду PECL. Единственное, что мне помогло, это установка пакета php-xml
. Сначала проверьте, установлен ли у вас модуль XML с помощью
php -m
. Если вы не найдете его, вам необходимо
sudo apt-get install php-pear
, он автоматически установит пакет php-xml. или вы можете просто установить xml следующим образом (в зависимости от вашей версии php)
sudo apt-get install php-xml php7.0-xml
Если вы найдете xml, вы должны удалить его и переустановить
sudo apt-get purge php*-xml
sudo apt-get autoremove php*-xml
sudo apt-get install php-xml php7.0-xml
Если у вас RPM в качестве диспетчера пакетов, вы можете использовать yum установить php-xml
и yum remove php-xml
Люди PHP7 / Debian (похожая / та же причина):
Причина этого, как упоминалось выше, в отсутствии расширения XML. Мы должны использовать dotdeb , и они удалили xml из встроенной в отдельный пакет:
источник: https: //www.dotdeb .org / 2016/06/24 / php-7-0-8-for-jessie /
Обратите внимание, что для bcmatch, dba, mbstring, soap, xml и zip теперь выделены отдельные пакеты.
Это означает, что
php -n
больше не будет включать xml, от которого зависит синтаксический анализатор пакетов PEAR (синтаксический анализатор XML). Источник pear.php.net/package/PEAR/download
Расширение PHP: xml
Поскольку для pecl критически важно не использовать php.ini системы, чтобы гарантировать функциональность во всех случаях (даже если неисправность причина, по которой вы запускаете pecl ..) он не изменится с помощью -n .. скорее, ребятам из dotdeb нужно, наконец, прекратить переупаковку,реструктуризация и изменение пакетов arround без даже небольшого тестирования.
Также существует проблема с поставляемым пакетом PEAR, который необходимо обновить с помощью ... не разрешено публиковать что-либо еще из-за текущей репутации
Я использую php5.6.
Многие ответы рекомендуют установить php-xml, но он не работает для меня, когда я набираю конкретную версию, например
sudo apt-get install php5.6-xml
, и все работает, возможно, это поможет другим.