PECLコマンドはエラーの長いリストを生成します


47

現在、CentOS 6.5でPHP 5.4を実行しています。

webtatic php55wパッケージをインストールし、PECLを介してredisおよびmongoとともにPEAR + PECLを問題なくインストールしました。

まもなく、私は5.5が私が作業していたフレームワークと互換性がないことに気づいたので、php55wを消去し、その場所にphp54wをインストールしました。

現在、peclコマンドはまったく機能しません。これは、peclコマンドを発行するたびに、この非常に長いエラー文字列を生成します(略して...何十回も繰​​り返されます)。

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

どうすれば修正できますか?

回答:


91

RedHat EL v6でPHPインストールを5.5.14に更新した後、このエラーに遭遇しました。Yumパッケージマネージャー経由でPHPをインストールした後、使用していたPHP拡張機能の一部を再インストールする必要がありました。この問題を解決するためのヒントを探していると、この質問に出会いました。今、ここで私の発見を共有したい実用的なソリューションを発見しました。私がオンラインで見つけたPECL / PEARの消去と再インストールを含むその他の提案は、私のPHPインストールでさえこの問題を解決しませんでした。最後に、PECL / PEARのソースコードをさらに調査およびレビューした後、本当の原因を見つけました。うまくいけば、次のことが他の人の助けになるでしょう:

PHPインストールでデフォルトでXMLが有効になっていない場合にPECLを実行しようとすると、このエラーが表示される場合がありますが、通常、XMLサポートはPHP拡張モジュールを介してPHPインストールにロードされます(./configure --disable-xmlPHPのビルド時にフラグが指定された場合に発生する可能性がありますソースから、またはPHPのビルドが拡張モジュールを介してXMLをロードするように構成されているさまざまなパッケージマネージャーを介してPHPをインストールした場合)。

PECLからのエラー出力の最後の行がどのように注意してくださいXML Extension not foundPECLはそのXMLParser.phpクラスを使用しようとすると、それはXMLの拡張使用してXMLモジュールのための(それをチェックしアクセスすることはできませんので、それが失敗したため、このエラーが表示されている理由がある- extension_loaded('xml')ラインの周りをXMLParser.phpソースの259)、およびXMLモジュールが利用できないため、その構成/設定ファイルを解析できず、上記の他のすべてのエラーを出力します。

この問題が発生する理由は、PECLの動作方法によるものです。PECLコマンド自体は単なるシェルスクリプトであり、システムインストールでPHPがインストールされている場所で最初に動作し、コマンドラインで多数のフラグを使用してPHPを呼び出してから、メインPECL PHPスクリプトファイルへのパスを提供します。PECLシェルスクリプトが使用している問題フラグは、ファイル-nを無視するようにPHPに指示するオプションphp.iniです(したがってphp.ini、この場合XMLを含む、ファイルが指定する追加の拡張子は読み込まれません)。

-n次の2つのコマンドを実行すると、フラグの影響を確認できます。

  • 最初にphp -mコマンドラインで実行してみてください
  • 次に、出力を比較します php -n -m

2番目のコマンドを実行するときに、XMLがファイル-nを解析しないようにPHPに指示したため、XML拡張が表示されないはずphp.iniです。

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が使用するシェルスクリプトと非常によく似たシェルスクリプトが表示されますが、-nPHPを呼び出すコマンドにはフラグが欠落しているため、PEARコマンドはこれらの同じ問題の影響を受けません。


5
素晴らしい答え、peclスクリプトの編集はうまくいきました。
アレックスロス

29
あなたは…聖人です。... ...文字通り。すべての新聞の死亡記事をスキャンするスクリプトを作成し、あなたが亡くなったらすぐに、この答えを地球上の行為の例として使用して、バチカンに列福のプロセスを開始するように指示します。素晴らしい答え:)
riwalk

5
ありがとう。TLDR; 最後の行を編集して/usr/bin/pecl、-nパラメーターを使用しないようにします。
dtbarne

7
実行sed -i "$ s|\-n||g" /usr/bin/pecl
-AVProgrammer

6
私は-n最後のコマンドを持っていませんし、peclエラーの長いリストは残念ながら残っています
白紙のホワイトレター

29

PECLコマンドを呼び出すと、ubuntuでこの問題に直面しました。私を助けた唯一のことは、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 install php-xmlyum remove php-xml


1
php-xml php7.0-xmlはインストールされていますが、XMLモジュールはここにありません
-Loenix

助けてくれた
すばらしい

8

php5.6を使用しています。

php-xmlをインストールすることをお勧めしますが、次のような特定のバージョンを入力すると機能しません

sudo apt-get install php5.6-xml

そしてすべてが機能し、おそらく他の人を助けるでしょう。


PHP

php 7.2、Ubuntu 16.04で働いていました。私の命令は:sudo apt install php7.2-xmlでした。必要に応じて回答を更新して、私のコマンドも含めることができます:)ありがとう
voghDev

4

「XML Extension not found」問題を修正するには、php-xmlパッケージをインストールする必要があります


2
ここでもう少し説明が役立ちます。
カスペルド

この質問はほぼ2年前のものです。ホーム画面が乱雑になるため、古い質問に答えないようにしてください。
キャサリンマッキネス

1
私がそれに答えた理由は、今日この問題に遭遇し、この解決策が私の問題を解決したからです!
kavehmb

私が使用しているので、これが私たちがしなければならなかった唯一のことです。php7.2コマンドを使用して相対バージョンをインストールしたばかりのファイルを編集しませんでしたsudo apt-get install php7.2-xml
Muhammad Omer Aslam

2

PEAR RPMを完全に削除してから、rm -rf /usr/share/pear/pearとすべてのモジュールを再度インストールします。


それに続いてyum erase php-pear、今ではすべてが順調です!ありがとう!:)
eComEvo 14

1
再インストールするときは、php-pearパッケージの代わりに、php pearのphp54wバージョンを使用することに注意してください。要するに1. yum erase php-pear2. rm -rf /usr/share/pear/3.yum install php54w-pear
アッティラフロップ14年

2

次の手順が役立ちます。

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

0

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

PEARパッケージパーサーが依存するxml(XMLパーサー)は含まれなくなります。ソースpear.php.net/package/PEAR/download

PHP拡張:xml

peclがシステムのphp.iniを使用しないことが重要であるため、すべての場合に機能性を保証するために(機能不全がpecl ..を実行する理由であっても)-n ..を使用して変更することはありません。最終的には、少しでもテストせずに、パッケージの再パッケージ、再構築、およびシフトを停止します。

出荷されたPEARパッケージにも問題があります。これは、現在の評判により、他のものを投稿することはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.