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

时间:2013-01-23 11:44:34

标签: command-line-interface php-extension

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

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

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

3 个答案:

答案 0 :(得分:54)

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

php -m

或更多信息:

php -i

希望这有帮助。

答案 1 :(得分:7)

1)运行

php -i

从输出中找到以下参数:

加载配置文件 - 这将指定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并验证已加载的配置文件已解析的其他.ini文件的值均为(无)

4)运行

php -m

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

答案 2 :(得分:2)

我不确定这是否可以从常规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";
    }
}

这不是万无一失的,但对你来说可能已经足够了!