Команда PECL производит длинный список ошибок

Является, вероятно, самым легким просто послушать только на localhost:

protocol imap {
    listen = 127.0.0.1:143
    ssl_listen = 127.0.0.1:993
}
47
задан 18 April 2014 в 08:08
7 ответов

Я наткнулся на эту ошибку после обновления моей установки 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 не подвержена этим же проблемам.

.
91
ответ дан 28 November 2019 в 19:38

Полностью удалите все RPM PEAR, затем rm -rf / usr / share / pear / , затем снова установите pear и все ваши модули.

2
ответ дан 28 November 2019 в 19:38

Для меня работают следующие шаги.

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
2
ответ дан 28 November 2019 в 19:38

вам необходимо установить пакет php-xml, чтобы исправить проблему «XML Extension not found»

4
ответ дан 28 November 2019 в 19:38

Я только что столкнулся с этой проблемой в 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

29
ответ дан 28 November 2019 в 19:38

Люди 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, который необходимо обновить с помощью ... не разрешено публиковать что-либо еще из-за текущей репутации

0
ответ дан 28 November 2019 в 19:38

Я использую php5.6.

Многие ответы рекомендуют установить php-xml, но он не работает для меня, когда я набираю конкретную версию, например

sudo apt-get install php5.6-xml

, и все работает, возможно, это поможет другим.

8
ответ дан 28 November 2019 в 19:38

Теги

Похожие вопросы