Me deparei com esse erro depois de atualizar minha instalação do PHP para 5.5.14, no RedHat EL v6. Instalei o PHP por meio do gerenciador de pacotes Yum e, em seguida, precisei reinstalar algumas das extensões PHP que estava usando. Ao procurar dicas sobre como resolver esse problema, me deparei com essa questão e agora que descobri uma solução funcional, queria compartilhar minhas descobertas aqui. Outras sugestões que encontrei on-line, incluindo a exclusão e reinstalação do PECL / PEAR, e mesmo a minha instalação do PHP não resolveram esse problema. Finalmente, depois de algumas pesquisas e revisão do código fonte do PECL / PEAR, encontrei a causa real. Esperamos que o que se segue ajude outros:
Você pode ver esse erro ao tentar executar o PECL se a instalação do PHP não tiver o XML ativado por padrão, mas o suporte a XML geralmente é carregado na instalação do PHP por meio de um módulo de extensão PHP (isso pode ocorrer se o ./configure --disable-xml
sinalizador for especificado ao criar o PHP da fonte ou se você instalou o PHP por meio de vários gerenciadores de pacotes nos quais essa compilação do PHP está configurada para carregar XML por meio de um módulo de extensão).
Observe como está a última linha da saída de erro do PECL XML Extension not found
- a razão pela qual esse erro está aparecendo é porque, quando o PECL tenta usar sua classe XMLParser.php, ele falha porque não pode acessar a extensão XML (verifica o módulo XML usando a extension_loaded('xml')
linha ao redor) 259 da fonte XMLParser.php) e, como o módulo XML não está disponível, ele não pode analisar seus arquivos de configuração / configurações e gera todos os outros erros vistos acima.
A razão pela qual esse problema ocorre é devido à maneira como o PECL opera. O próprio comando PECL é apenas um script de shell, que primeiro funciona onde o PHP está instalado na instalação do sistema e, em seguida, chama o PHP na linha de comando com um número de sinalizadores antes de fornecer o caminho para o principal arquivo de script PHP do PECL. O sinalizador de problema que o script shell PECL está usando é a -n
opção, que instrui o PHP a ignorar todos os php.ini
arquivos (e, portanto, o PHP não carregará nenhuma das extensões adicionais php.ini
especificadas pelo arquivo, incluindo neste caso o XML).
Pode-se ver o impacto do -n
sinalizador executando os dois comandos a seguir:
- primeiro tente executar
php -m
na linha de comando
- depois compare a saída com
php -n -m
Você não deve ver a extensão XML listada ao executar o segundo comando, porque a -n
flag disse ao PHP para não analisar nosso php.ini
(s) arquivo (s).
Se você executar vi `which pecl`
na linha de comando, deverá ver o conteúdo do comando PECL (como observado acima, é apenas um script de shell) e, se você inspecionar a última linha, verá algo parecido com isto:
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 "$@"
Você deve ver o -n
sinalizador listado entre os sinalizadores -C
e -q
. Se você editar o script do shell PECL, omitindo o -n
sinalizador, você poderá executar o PECL novamente sem problemas.
Como alternativa, você pode recompilar o PHP da fonte, certificando-se de que o módulo XML seja compilado no binário do PHP em vez de ser carregado a partir de um módulo de extensão do PHP em tempo de execução. Obviamente, editar o script de shell do PECL para remover o -n
sinalizador só corrigirá o problema até que o PECL / PEAR seja reinstalado, espero que os mantenedores do PECL / PEAR possam atualizar seu repositório com essa correção. Garantir que o PHP seja construído com o suporte XML compilado é, no entanto, uma correção de longo prazo para a solução, mas pode não ser o ideal para as circunstâncias de todos.
Apenas para completar, se você executar vi `which pear`
, verá um shell script muito semelhante ao que o PECL usa; no entanto, o -n
sinalizador está ausente no comando que chama PHP e, como tal, o comando PEAR não está sujeito a esses mesmos problemas.
/usr/bin/pecl
para não usar o parâmetro -n.sed -i "$ s|\-n||g" /usr/bin/pecl
-n
no último comando depecl
e a longa lista de erros permanece infelizmenteEu apenas enfrentei esse problema no ubuntu quando liguei para o comando PECL. A única coisa que me ajudou foi instalar o
php-xml
pacote. Primeiro verifique se você já possui o módulo XML instalado com oSe você não o encontrar, precisará
instalará automaticamente o pacote php-xml. ou você pode simplesmente instalar xml como este (dependendo da versão do php que você possui)
Se você encontrar o xml, remova-o e reinstale-o
Se você possui o RPM como gerenciador de pacotes, pode usar
yum install php-xml
eyum remove php-xml
fonte
Estou usando o php5.6.
Muitas respostas recomendam a instalação do php-xml, mas não está funcionando para mim, quando digito uma versão específica como
e tudo funciona, talvez ajude os outros.
fonte
sudo apt install php7.2-xml
. Você pode atualizar a resposta para incluir também meu comando, se quiser :) obrigadovocê precisa instalar o pacote php-xml para corrigir o problema "Extensão XML não encontrada"
fonte
php7.2
e eu não editado quaisquer arquivos acabou de instalar a minha versão relativa usando o comandosudo apt-get install php7.2-xml
Remova completamente os RPMs do PEAR e, em seguida
rm -rf /usr/share/pear/
, instale o pear novamente e todos os seus módulos.fonte
yum erase php-pear
e agora está tudo bem! Obrigado! :)yum erase php-pear
2.rm -rf /usr/share/pear/
3.yum install php54w-pear
Os seguintes passos funcionam para mim.
1 passo:
2 passo:
3 passo:
fonte
PHP7 / pessoas Debian (similar / mesma razão):
A razão para isso é, como mencionado acima, a extensão XML ausente. Obrigação de nós vai usar Dotdeb , ea ter xml removido de ser build-in para ser um pacote separado:
fonte: https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/
Isso significa que
php -n
não incluirá mais xml, do qual o analisador de pacotes PEAR depende (analisador de XML). Fonte pear.php.net/package/PEAR/download
Como é fundamental que o pecl não use o php.ini do sistema, para garantir a funcionalidade em todos os casos (mesmo que a disfuncionalidade seja a razão pela qual você executa o pecl ..), ele não mudará usando -n .. os dotdeb precisam para finalmente parar de reembalar, reestruturar e mudar pacotes espalhados sem sequer testá-lo levemente.
Há também um problema com o pacote PEAR enviado, que precisa ser atualizado com ... não é permitido postar mais nada devido à reputação atual
fonte