O comando PECL produz uma longa lista de erros

39

Atualmente executando o PHP 5.4 no CentOS 6.5.

Instalei o pacote webtatic php55w e instalei o PEAR + PECL sem problemas, juntamente com os redis e mongo através do PECL.

Pouco depois, percebi que o 5.5 não é compatível com o framework com o qual eu estava trabalhando, então eu deletei o php55w e instalei o php54w em seu lugar.

Agora o comando pecl não funciona. Ele apenas produz esta longa série de erros toda vez que eu emito qualquer comando pecl (abreviado ... mais repetido dezenas de vezes):

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

Como posso corrigir isso?

    
por eComEvo 18.04.2014 / 03:32

7 respostas

83

Me deparei com esse erro após atualizar minha instalação do PHP para 5.5.14, no RedHat EL v6. Eu tinha instalado o PHP através do gerenciador de pacotes Yum, e então precisava reinstalar algumas das extensões PHP que eu estava usando. Na busca de dicas sobre como resolver esse problema, me deparei com essa pergunta e, agora que descobri uma solução de trabalho, quis compartilhar minhas descobertas aqui. Outras sugestões que eu encontrei online, que incluíam apagar e reinstalar o PECL / PEAR e até mesmo a minha instalação do PHP, não resolveram esse problema. Finalmente, após algumas pesquisas e revisão do código-fonte do PECL / PEAR, encontrei a causa real. Espero que o que se segue seja de ajuda para os outros:

Você pode ver este erro ao tentar executar o PECL se a sua instalação do PHP não tem o XML habilitado por padrão, mas o suporte a XML é normalmente carregado em sua instalação PHP através de um módulo de extensão PHP (isso pode ocorrer se o ./configure --disable-xml flag foi especificado ao construir o PHP a partir do código-fonte, ou se você instalou o PHP através de vários gerenciadores de pacotes nos quais a compilação do PHP está configurada para carregar XML através de um módulo de extensão).

Observe como 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 extension_loaded('xml') ao redor da linha 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.

O motivo pelo 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 seu sistema, e então chama o PHP na linha de comando com um número de flags antes de fornecer o caminho para o arquivo principal do script PECL. O sinalizador de problema que o shell script PECL está usando é a opção -n , que diz ao PHP para ignorar qualquer arquivo php.ini (e, portanto, o PHP não carregará nenhuma das extensões adicionais que o arquivo php.ini especificar, incluindo neste caso XML).

Pode-se ver o impacto do sinalizador -n executando os dois comandos a seguir:

  • primeiro, execute php -m na linha de comando
  • , em seguida, compare a saída com php -n -m

Você não deve ver a extensão XML listada quando executar o segundo comando porque o -n sinalizou ao PHP para não analisar nosso (s) arquivo (s) php.ini .

Se você executar vi 'which pecl' na linha de comando, deverá ver o conteúdo do comando PECL (como mencionado acima, é apenas um script de shell) e, se você inspecionar a última linha, verá algo assim:

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 sinalizador -n listado entre os sinalizadores -C e -q . Se você editar o shell script do PECL, omitindo o -n flag, você poderá executar o PECL novamente sem problemas.

Como alternativa, você pode recompilar o PHP a partir do código-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, a edição do shell script do PECL para remover o -n flag só corrigirá o problema até que o PECL / PEAR seja reinstalado, mas os mantenedores do PECL / PEAR podem atualizar seu repositório com essa correção. Garantir que o PHP é construído com suporte a XML compilado, é, no entanto, uma correção de longo prazo para a solução, mas pode não ser ideal para as circunstâncias de todos.

Apenas para completar, se você executar vi 'which pear' , verá um script de shell muito semelhante ao que o PECL usa, no entanto, o sinalizador -n está ausente do comando que chama PHP e, como tal, o comando PEAR não é sujeitos a esses mesmos problemas.

    
por 11.07.2014 / 22:58
21

Eu apenas enfrentei este problema no Ubuntu quando liguei para o comando PECL. A única coisa que me ajudou é instalar o pacote php-xml . Primeiro verifique se você tem o módulo XML já instalado com

php -m

Se você não encontrar, então você tem que

sudo apt-get install php-pear

ele irá instalar automaticamente o pacote php-xml. ou você pode simplesmente instalar o xml assim (dependendo da versão do php que você tem)

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

Se você encontrar xml, remova-o e reinstale-o

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

Se você tem o RPM como gerenciador de pacotes, pode usar yum install php-xml e yum remove php-xml

    
por 11.04.2016 / 13:32
5

Estou usando o php5.6.

Muitas respostas recomendam instalar o php-xml, mas não funciona para mim, quando eu digito uma versão específica como

sudo apt-get install php5.6-xml

e tudo funciona, talvez ajude os outros.

    
por 23.03.2017 / 16:20
3

você precisa instalar o pacote php-xml para corrigir o problema "Extensão XML não encontrada"

    
por 24.02.2016 / 17:38
2

Remova todos os RPMs PEAR completamente, então rm -rf /usr/share/pear/ então instale novamente a pêra e todos os seus módulos.

    
por 18.04.2014 / 08:28
2

As etapas a seguir funcionam para mim.

1 passo:

yum erase php-pear

2 passo:

# 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 passo:

 yum install --enablerepo=remi --enablerepo=remi-php56 php-pear
    
por 23.06.2015 / 10:45
0

PHP7 / pessoas do Debian (semelhante / mesmo motivo):

A razão para isso é, como mencionado acima, a extensão XML ausente. Devemos usar o dotdeb e remover o xml de build-in para um pacote separado:

fonte: link

Please also note that bcmatch, dba, mbstring, soap, xml and zip now have their separate dedicated packages.

Isso significa que

php -n

não incluirá mais xml, do qual o analisador do pacote PEAR depende (analisador XML). Fonte pear.php.net/package/PEAR/download

PHP Extension: xml

Como é crítico para o pecl não usar o php.ini do sistema, para garantir a funcionalidade em todos os casos (mesmo que a disfuncionalidade seja o motivo pelo qual você executa o pecl ..) ele não será alterado usando -n .. dotdeb guys precisam finalmente parar de reempacotar, reestruturar e transferir pacotes sem testar um pouco.

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

    
por 26.06.2016 / 06:03