web-dev-qa-db-ja.com

動的にロードされたPHPコマンドラインからの拡張機能をチェック

PHPマニュアル をチェックして、さまざまな種類のPHP拡張(PHPモジュール)を理解しました。 Zendモジュール(主にPHPの達人用)、組み込みモジュール、外部モジュールがあります。

PHPモジュールが動的にロードされているか、それともPHPバイナリに組み込まれているかをコマンドラインから確認する方法はありますか?

つまり、php -mを使用すると、ロードされたすべてのモジュールが取得されますが、どのモジュールが組み込みで、どのモジュールが外部であるかを知りたいのです。

20
rodrunner

通常のPHPコードから、これが可能かどうかはわかりません。独自の拡張機能からZendの内部呼び出しが行われる可能性があります。ロードされた拡張機能に、使用可能な動的ライブラリがあるかどうかを確認することにより...

$extdir=ini_get('extension_dir');

$modules=get_loaded_extensions();
foreach($modules as $m){
    $lib=$extdir.'/'.$m.'.so';
    if (file_exists($lib)) {
        print "$m: dynamically loaded\n";
    } else {
        print "$m: statically loaded\n";
    }
}

それは絶対確実ではありませんが、あなたには十分かもしれません!

2
Paul Dixon

コマンドラインで次のコマンドを実行するだけです:

php -m

または、これについての詳細:

php -i

お役に立てれば。

55
mineroot

1)実行

php -i

出力から、次のパラメーターを見つけます。

Loaded Configuration File-これは、phpで使用されているphp.iniファイルの場所を指定します。

追加の.iniファイルについてこのディレクトリをスキャン-これが空でない場合、このディレクトリ内のいくつかの.iniファイルはPHP拡張機能を動的にロードします。

追加の解析された.iniファイル-前のパラメータで指定されたディレクトリからロードされた.iniファイル。

Linuxを使用している場合:

php -i | grep -e "Loaded Configuration File" -e "Scan this dir for additional .ini files" -e "Additional .ini files parsed"

2)php.iniファイルの名前を変更し、追加の.iniファイルを含むフォルダーの名前を変更します。

3)ステップ#1を繰り返し、Loaded Configuration FileおよびAdditional .ini files parsedの両方の値が(none)であることを確認します

4)実行

php -m

Phpバイナリに組み込まれている拡張機能のみを含むリストが表示されます。

7
Hillel Barak