在 PHP-FPM 的网页中,我们可以通过 phpinfo() 函数来查看当前 PHP 的状态及扩展干系信息。而在 CLI 命令行脚本中,我们可以利用 php -m 命令来查看已加载的扩展。
动态加载扩展首先,我们在 php.ini 中关闭 redis 扩展的加载,并且同时须要打开 enable_dl=1 ,这样,我们就可以利用 dl() 函数来动态加载一个扩展了。
dl("redis");echoextension_loaded("redis");//1
没错, dl() 函数正是用来动态加载扩展的一个函数。不过它的利用是有许多限定的,这也并不是一个安全的函数。以是在 PHP7 中,它在 php.ini 的配置 enable_dl 已经是默认关闭的了。我们在生产环境也只管即便不要利用这种办法进行扩展的加载。
其余,这个函数在 PHP7 中仅对 CLI 环境有效。也便是说,在 PHP-FPM 的网页环境下,这个函数是没用的,纵然已经打开了 php.ini 中的 enable_dl 。
扩展加载的目录因此 PHP 默认的扩展目录为根本进行加载的,在 windows 环境下把稳扩展名为 .dll 文件。当扩展加载失落败时,不仅这个函数会返回 false ,同时还会产生一条 E_WARNING 的缺点。末了,在 PHP 安全模式下,这个函数也同样是无法利用的。
综上所述,在生产环境中,我们还是只管即便不要利用动态加载扩展的能力。这个可以当成我们的一个学习资料,在自己本机电脑上不想一次加载太多扩展的情形下利用,当须要测试某些功能而须要某些分外的扩展时,再考虑利用这个功能进行本地的测试。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202005/source/%E5%8A%A8%E6%80%81%E6%9F%A5%E7%9C%8B%E5%8F%8A%E5%8A%A0%E8%BD%BDPHP%E6%89%A9%E5%B1%95.php
参考文档:
https://www.php.net/manual/zh/function.extension-loaded.php
https://www.php.net/manual/zh/function.dl.php