現在、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
どうすれば修正できますか?
RedHat EL v6でPHPインストールを5.5.14に更新した後、このエラーに遭遇しました。 PHPパッケージマネージャーを介してYumをインストールした後、使用していたPHP拡張機能の一部を再インストールする必要がありました。この問題を解決するためのヒントを探す際に、この質問に出くわしました。発見したことをここで共有したい実用的な解決策を見つけました。 PECL/PEARの消去と再インストールを含む、オンラインで見つけた他の提案、およびPHPインストールでさえ、この問題は解決しませんでした。最後に、PECL/PEARのソースコードをさらに調査およびレビューした後、本当の原因を発見しました。うまくいけば、以下が他の人の助けになるでしょう:
PHPインストールでXMLがデフォルトで有効になっていない場合にPECLを実行しようとすると、このエラーが表示されることがありますが、代わりにXMLサポートがPHP拡張モジュールを介してPHPインストールに読み込まれます。 (これは、ソースからPHPをビルドするときに./configure --disable-xml
フラグが指定された場合、またはPHPのビルドがロードするように構成されているさまざまなパッケージマネージャーを介してPHPをインストールした場合に発生する可能性があります。拡張モジュールを介したXML)。
PECLからのエラー出力の最後の行がXML Extension not found
であることに注意してください。このエラーが表示される理由は、PECLがXMLParser.phpクラスを使用しようとすると、XML拡張機能にアクセスできないために失敗するためです( XMLParser.phpソースの259行目でextension_loaded('xml')
を使用するXMLモジュール。XMLモジュールは使用できないため、構成/設定ファイルを解析できず、上記の他のすべてのエラーが出力されます。
この問題が発生する理由は、PECLの動作方法にあります。 PECLコマンド自体は単なるシェルスクリプトであり、最初にPHPがシステムインストールのどこにインストールされているかを調べ、次にコマンドラインでPHPを呼び出します。メインPECL PHPスクリプトファイル。 PECLシェルスクリプトが使用している問題フラグは-n
オプションで、PHPにphp.ini
ファイルを無視するように指示します(したがって、PHPは追加のファイルをロードしませんphp.ini
ファイルで指定されている拡張子(この場合はXMLを含む)。
次の2つのコマンドを実行すると、-n
フラグの影響を確認できます。
php -m
を実行してみてくださいphp -n -m
と比較します-n
フラグがPHPにphp.ini
ファイルを解析しないように指示したため、2番目のコマンドを実行してもXML拡張機能が表示されないはずです。
コマンドラインで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が使用するものと非常によく似たシェルスクリプトが表示されますが、PHPを呼び出すコマンドに-n
フラグがありません。 PEARコマンドはこれらの同じ問題の影響を受けません。
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-xml
およびyum remove php-xml
を使用できます。
私はphp5.6を使用しています。
多くの回答がphp-xmlのインストールを推奨していますが、次のように特定のバージョンを入力すると機能しません
Sudo apt-get install php5.6-xml
そしてすべてが機能し、おそらく他の人を助けるでしょう。
「XML Extension not found」の問題を修正するには、php-xmlパッケージをインストールする必要があります
次の手順でうまくいきます。
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
PEAR RPMを完全に削除してから、rm -rf /usr/share/pear/
次に、pearとすべてのモジュールを再度インストールします。
PHP7/Debianの人々(同様/同じ理由):
その理由は、前述のように、欠落しているXML拡張機能です。 dotdebを使用する必要があり、build-in別のパッケージになるには:
ソース: 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を使用しても変更されません..むしろdotdebの人が必要です少しテストすることなく、arroundパッケージの再パッケージ、再構築、シフトを最終的に停止します。
出荷されたPEARパッケージに問題があります。これはアップグレードする必要があります...現在の評判のため、他のものを投稿することはできません