如何动态查看及加载PHP扩展

admin3年前PHP教程34
目录
查看是否已经加载了扩展动态加载扩展测试代码:

在编译并完成 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 安全模式下,这个函数也同样是无法使用的。

综上所述,在生产环境中,我们还是尽量不要使用动态加载扩展的能力。这个可以当成我们的一个学习资料,在自己本机电脑上不想一次加载太多扩展的情况下使用,当需要测试某些功能而需要某些特殊的扩展时,再考虑使用这个功能进行本地的测试。

测试代码:
<?php
 
echo extension_loaded("redis");
 
dl("redis");
 
echo extension_loaded("redis");

以上就是如何动态查看及加载PHP扩展的详细内容,更多关于动态查看及加载PHP扩展的资料请关注其它相关文章!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

PHP二维码的生成与识别案例

二维码的分类线性堆叠式二维码矩阵式二维码二维码的优缺点优点信息容量大编码范围广容错能力强译码可靠性高可引入加密措施成本低,易制作缺点二维码技术成为手机病毒、钓鱼网站传播的新渠道信息泄密目前流行的三大国...

php substr()去掉最后一位字符的实例方法

本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php substr()去掉最后一位字符substr() 函数可以从字符串的指定位置截取一定长度的字符,并返回。其语法格式如下:...

PHP中的.htaccess伪静态文件

工具/原料 url重写 iis7 方法/步骤安装iis,这个就不多说了。使用系统自带的启动或关闭windows功能来安装。microsoft/web/downloads/,下载并安装“we...

thinkphp的钩子的两种配置和两种调用方法

thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十...

详解PHP的引用计数

目录什么是引用计数怎么查看引用计数?对象的引用计数数组的引用计数关于内存泄露需要注意的地方总结什么是引用计数在PHP的数据结构中,引用计数就是指每一个变量,除了保存了它们的类型和值之外,还额外保存了两...

php访问对象中的成员的实例方法

对象是由成员属性和成员方法构成的,想要访问对象成员的话,实际上有点像访问数组中的元素,既然有点像的话,通过对象的引用来访问对象的成员,还需要使用一个特殊的运算符号->来完成对象成员的访问。实例?...