我正在查看PHP 手册以了解不同类型的 PHP 扩展(PHP 模块)。有 Zend 模块(主要针对 PHP 大师)、内置模块和外部模块。
有没有办法从命令行判断 PHP 模块是动态加载还是内置到 PHP 二进制文件中?
我的意思是:php -m
我得到了所有加载的模块,但我想知道哪些是内置的,哪些是外部的。
我正在查看PHP 手册以了解不同类型的 PHP 扩展(PHP 模块)。有 Zend 模块(主要针对 PHP 大师)、内置模块和外部模块。
有没有办法从命令行判断 PHP 模块是动态加载还是内置到 PHP 二进制文件中?
我的意思是:php -m
我得到了所有加载的模块,但我想知道哪些是内置的,哪些是外部的。
只需在命令行上运行此命令:
php -m
或此以获取更多信息:
php -i
希望这可以帮助。
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 二进制文件的内置扩展。
我不确定这是否可以通过常规 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";
}
}
这不是万无一失的,但对你来说可能就足够了!