如何动态查看及加载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 安全模式下,这个函数也同样是无法使用的。

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

测试代码:

<?php

echo extension_loaded("redis");

dl("redis");

echo extension_loaded("redis");

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

(0)

相关推荐

  • PHP安装扩展mcrypt以及相关依赖项深入讲解

    PHP安装扩展mcrypt以及相关依赖项 [PHP安装PECL扩展的方法] 一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装.其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128,TWOFISH, TEA, RC2 和 GOST加密算法,并且提供了CBC.OFB.CFB 和 ECB 四种块加密的模型. 二

  • win10下 php安装seaslog扩展的详细步骤

    一.检查系统环境情况 使用phpinfo()检查系统环境情况,找到需要下载的配置信息. Thread Safety = enabled是线程安全 Thread Safety = disabled是线程不安全 Thread Safety=enabled的,选择Thread Safe的版本:Thread Safety Safety=disabled的.选择Non Thread Safe版本. 二.下载seaslog扩展包 下载地址:http://pecl.php.net/package/SeasLo

  • docker 安装 php-fpm 服务 / 扩展 / 配置的示例教程详解

    在 mac 上用 brew 装 php56 时,因为 openssl 是 1.1 版本而导致各种 google 都搞不定的错误,太折腾了,现在用 docker 创建一个 php56-fpm 服务容器,nginx 直装在宿主机上. PHP DockerHub 主页 创建容器 # 创建容器 docker run -d \ --name php56-fpm \ -p 9056:9000 \ -v /home/wwwroot:/var/www/html --privileged=true php:5.6

  • Thinkphp使用Zxing扩展库解析二维码内容图文讲解

    一.下载PHP版本的Zxing扩展库 下载地址:https://github.com/khanamiryan/php-qrcode-detector-decoder 二.使用Zxing扩展库 1.文件下载好后,直接解压,结构如下,我们只需要lib这个文件夹 2.将lib文件夹重命名为Zxing,然后打开Zxing目录下的QrReader.php文件,可以发现命名空间是Zxing 3.接下来就很简单了,把Zxing文件夹放到thnikphp的扩展目录extend里 4.报错 Fatal error

  • php使用event扩展的io复用测试的示例

    先要安装event扩展,这样才可以使用libevent的事件机制 pecl install event 测试代码 //连接重用 //创建资源流的上下文 $context=stream_context_create([ 'socket'=>[ 'backlog'=>2000 ]]); stream_context_set_option($context,'socket','so_reuseaddr',1); //设置连接重用 //sock_set_option($this->server,

  • PHP扩展安装方法步骤解析

    php扩展安装方法极简单. 也遵循3大步.但多出一个phpize的步骤. 1.pecl.php.net 在右上解的输入框 中输入需要的扩展 比如 redis 2.搜索完成后会看到两个蓝色的框 . 下方有个表格. 表格内容如 search results (1 of 1) 再下面有一行不起眼的结果. 其中就有一个redis(搜索什么显示什么)关键词.然后点击进入一个界面 3.这个界面中,是一个表格. 其中最底步的表格中 有各版本的说明. 并不是任意版本支持所有php版本号. 都是有对应的. 都在这

  • 安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题

    我们以 PHP 扩展 zip 为例 访问PHP 官方插件库 搜索我们所需要的扩展 zip,我们选择最新的 stable 版本,进行下载 解压 tgz 下载到本地后,使用 tar -zxvf filename.tgz cd 进入文件,我们发现并不存在 .configure 文件,用于我们进行编译 这时我们使用 phpize 命令 执行完成后,即可展示我们熟悉的编译内容 即可进行正常的编译安装 参考文章: PHP 中 config.m4 的探索 总结 到此这篇关于安装PHP扩展时解压官方 tgz 文

  • PHP代码加密和扩展解密实战

    这种方案是通过对代码进行加密,然后利用C语音写解密的PHP扩展.破解难度会有提升,但依然是会被破解的. 从网上找过各种代码加密的开源方案. 一旦开源,就不可能保证安全性.毕竟加密和解密的东西都是公开的. 目前我们没有能力自己去写扩展.还是需要采用开源的方案. 我找到的比较好用的是php-beast. https://github.com/liexusong/php-beast 实战开始 1.下载源码 wget https://github.com/liexusong/php-beast/arch

  • php使用自带dom扩展进行元素匹配的原理解析

    DOMDocument php提供了非常好用的解析html和xml文档的扩展库DOM,使用这个库可以非常高效的进行html和xml文档的解析,它的原理就是通过寻找首尾匹配对来进行文档的解析. 从上面的分析可以看出,如果首位不匹配,可能就会导致一些错误的出现,因此,这个时候我们需要设置 libxml_use_internal_errors(true); 来进行错误的屏蔽,让它可以解析整个文档. 解析html基本用法 $dom = new \DOMDocument; $content = htmls

  • PHP 扩展Memcached命令用法实例总结

    本文实例讲述了PHP 扩展Memcached命令用法.分享给大家供大家参考,具体如下: 传送门:http://www.php.net/manual/zh/book.memcached.php windows 下没有memcached的扩展,只有memcache的扩展.亲测,两者之间还是有很大差别的.所以建议还是在linux做. <?php $mem = new Memcached(); //添加一台服务器资源 $mem->addServer('127.0.0.1', '11211'); //添

  • Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析

    本文实例讲述了Thinkphp 框架配置操作之动态配置.扩展配置及批量配置.分享给大家供大家参考,具体如下: 动态配置 设置格式: C('参数名称','新的参数值') 例如,我们需要动态改变数据缓存的有效期的话,可以使用 // 动态改变缓存有效期 C('DATA_CACHE_TIME',60); 动态配置赋值仅对当前请求有效,不会对以后的请求造成影响. 动态改变配置参数的方法和读取配置的方法在使用上面非常接近,都是使用C方法,只是参数的不同. 也可以支持二维数组的读取和设置,使用点语法进行操作,

随机推荐