25

我正在查看PHP 手册以了解不同类型的 PHP 扩展(PHP 模块)。有 Zend 模块(主要针对 PHP 大师)、内置模块和外部模块。

有没有办法从命令行判断 PHP 模块是动态加载还是内置到 PHP 二进制文件中?

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

4

3 回答 3

72

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

php -m

或此以获取更多信息:

php -i

希望这可以帮助。

于 2015-04-02T12:26:26.827 回答
8

1) 运行

php -i

从输出中找到以下参数:

加载的配置文件- 这将指定您的 php.ini 文件正在使用的 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 文件的值是否均为(none)

4) 运行

php -m

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

于 2015-11-03T09:35:57.967 回答
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";
    }
}

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

于 2013-01-23T11:54:43.257 回答