从命令行检查动态加载的PHP扩展

rod*_*ner 20 command-line-interface php-extension

我正在检查PHP手册以了解不同类型的PHP扩展(PHP模块).有Zend模块(主要用于PHP专家),内置模块和外部模块.

有没有办法从命令行告诉PHP模块是否已动态加载或是否内置到PHP二进制文件中?

我的意思是:php -m我得到所有加载的模块,但我想知道哪些是内置的,哪些是外部的.

小智 56

只需在命令行上运行此命令:

php -m
Run Code Online (Sandbox Code Playgroud)

或者更多信息:

php -i
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 这有助于区分动态加载的扩展和内置于二进制文件中的扩展?据我所知,两种类型都相同.除非我遗漏了什么,否则这与提出的问题完全无关 - 特别是因为提问者*在问题中提到了'php -m`*并解释了为什么它没有给他所需的信息. (3认同)

小智 7

1)跑

php -i
Run Code Online (Sandbox Code Playgroud)

从输出中找到以下参数:

加载配置文件 - 这将指定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"
Run Code Online (Sandbox Code Playgroud)

2)重命名您的php.ini文件,并使用其他.ini文件重命名该文件夹.

3)重复步骤#1并验证解析的加载配置文件附加.ini文件的值均为(无)

4)跑

php -m
Run Code Online (Sandbox Code Playgroud)

您现在将看到一个列表,其中仅包含内置于php二进制文件的扩展名.


Pau*_*xon 3

我不确定这是否可以从常规 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";
    }
}
Run Code Online (Sandbox Code Playgroud)

这并非万无一失,但对您来说可能就足够了!