动态查看及加载PHP扩展

动态查看及加载PHP扩展

在编译并完成 php.ini 的配置之后,我们就成功的安装了一个 PHP 的扩展。不过, PHP 也为我们提供了两个在动态运行期间可以查看扩展状态以及加载未在 php.ini 中进行配置的扩展的函数。下面,我们就来看看它们的使用。

查看是否已经加载了扩展

echo extension_loaded("redis");

非常简单的一个函数,它的作用就是检查一个扩展是否已经加载。它返回的是一个布尔值,当扩展已经加载则返回 true ,如果扩展没有加载,则返回 false 。

在 PHP-FPM 的网页中,我们可以通过 phpinfo() 函数来查看当前 PHP 的状态及扩展相关信息。而在 CLI 命令行脚本中,我们可以使用 php -m 命令来查看已加载的扩展。

动态加载扩展

首先,我们在 php.ini 中关闭 redis 扩展的加载,并且同时需要打开 enable_dl=1 ,这样,我们就可以使用 dl() 函数来动态加载一个扩展了。

dl("redis");
echo extension_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

(0)

相关推荐

  • 标梵详解php HTTP隧道详解

    在主机只能通过web访问而内部完全不出网的时候,我们一般可以通过使用上传http代理脚本代理出来,让我们实现对内网的探测. 一般常用的隧道就是reGeorg,这个工具在aspx和jsp环境下都没毛病, ...

  • [PHP小课堂]动态查看及加载PHP扩展

    [PHP小课堂]动态查看及加载PHP扩展 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[xiaoyuezigonggong/149844827]免费得PHP.项目管理学习资料 知乎. ...

  • 超级变变变,动态云组件加载实践

    动态组件可以说在可视化配置系统中常用的组件,也是能够实现可视化中,实现组件的核心要点. ○ 背景 这篇是作者在公司做了活动架构升级后,产出的主文的前导篇,考虑到本文相对独立,因此抽离出单独成文. 题目 ...

  • JAR冲突问题的解决以及运行状态下如何查看加载的类

    今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: java ...

  • 实现动态加载VXWORKS .O/.OUT模块

    整个过程为: 创建文件系统-->下载文件-->加载模块-->查找符号地址并执行 以下为演示该过程的一个简易实现文件,有使用或者引用的话,也 打个招呼,或者给评论一下: ======= ...

  • VxWorks动态加载(转)

    注:最近在做热补丁的功能,看到一篇gateway写的文章,觉得很通俗易懂的,就将搜集到的资料又整理了一下,供大家参考. 使用动态加载目标模块的方式有很多好处,比如可以在不破坏原来的环境下增加调试定位功 ...

  • vb动态加载dll的一个类,实现vb动态加载dll并动态调用dll导出的函数的一个方便办法

    自从会vb用调用动态库函数以来,我一直在想:如何动态的调用dll里的函数?网上有一个用CallWindowProc函数的方法,不过我还是喜欢自己有个 办法.今天工夫不负有心人,我终于把我心中一直想的办 ...

  • java~通过ClassLoader动态加载~tomcat模型

    在进行非WEB项目(Springboot)进行开发时,使用classLoader进行动态加载jar,并使用接口进行强类型转换是没有问题的,它们使用JVM下的URLClassLoader进行实现,而在基 ...

  • H3C案例查看:HPE服务器单独加载某个特定固件到SPP(Service Pack for ProL...

    总结: 1.下载要放到SPP里的固件需要是LINUX版本的rpm包,因为SPP本身就是个LINUX内核的系统. 2.在把低版本的固件加到SPP中以后,是可以显示出来的,并不是之前预想的那样被高版本覆盖 ...

  • 8 款优化网站加载速度的「Edge」扩展插件

    有些用户可能会遇到这种情况,为什么我家的宽带是 XXX M的,访问 XXX 网站速度那么慢,某宽带辣鸡!其实影响网站访问速度有挺多因素的,除了你的带宽网速.还有网站服务器带宽.服务器线路.网站本身程序 ...