动态查看及加载PHP扩展

异步沙漏
• 阅读 2667

在编译并完成 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

各自媒体平台均可搜索【硬核项目经理】

点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
swoole 安装与简单应用
方法一:PECL安装安装依赖包aptgetinstalllibpcre3libpcre3dev安装swoolepeclinstallswoole修改PHP配置php.ini 加载swoole验证安装与加载:phpm|grepswoole方法二:源码编译安装1.下载
MaxSky MaxSky
4年前
Windows 下编译 PHP Redis 扩展并支持 Igbinary 序列器
这是PHP下扩展的下载地址:当然,通过这个地址我们能够轻松的获取到Redis和Igbinary扩展并启用,但是,我们可以在页面上打开phpinfo()瞧瞧上方截图为重编译的Redis扩展,默认情况下通过上方网站下载的Redis扩展在Availableserializers中只有php一项。目前仅编译了
Stella981 Stella981
4年前
Kafka学习之(三)Centos下给PHP开启Kafka扩展(rdkafka)
Centos版本:Centos6.4,PHP版本:PHP7。在上一篇文章中使用IP为192.168.9.154的机器安装并开启了Kafka进行了简单测试,充当了Kafka服务器。本篇文章新开启一台IP为192.16.9.157的机器给PHP开启扩展。找到github的扩展下载地址,这里是phprdkafka,虽然php有一个扩展是phpkaf
Stella981 Stella981
4年前
PHP 调用windows系统自带的asp的dll方法
1、修改php.ini将php.ini中的com.allow_dcom设为TRUE增加扩展extensionphp_com_dotnet.dll,因为php5.4以后就不内嵌com了2、调用方法<?php$mydll
Wesley13 Wesley13
4年前
Linux下PHP安装Redis扩展
pecl.php.net,PECL库是一个PHP扩展,提供一个目录的所有已知的扩展和托管设备下载PHP扩展,PHP很多扩展都可以在这里面找到。今天主要讲解下Linux下php安装redis扩展,附有windows下redis扩展安装。1、PHP redis(https://www.oschina.net/action/GoToLink?url
Stella981 Stella981
4年前
Laravel使用redis保存SESSION
Laravel使用redis保存SESSION首先确认服务器已经安装redis服务,php安装了redis扩展.1.打开config/database.php。在redis配置项中增加session的连接'session''host'
可莉 可莉
4年前
11.32 php扩展模块装安装
1.32php动态扩展模块安装注: 本节操作使用PHP7。查看PHP模块:root@cham002~/usr/local/php/bin/phpmPHPModulesbz2Corectypedatedome
Wesley13 Wesley13
4年前
.Net Core Configuration Etcd数据源
前言    .NetCore为我们提供了一套强大的Configuration配置系统,使用简单扩展性强。通过这套配置系统我们可以将Json、Xml、Ini等数据源加载到程序中,也可以自己扩展其他形式的存储源。今天我们要做的就是通过自定义的方式为其扩展Etcd数据源操作。何为Etdc    在使用etcd之前我们先介绍一下Etcd
Stella981 Stella981
4年前
PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展、PHP的mysqli扩展、PHP数据对象(PDO),下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案。PHP的MySQL扩展是设计开发允许php应用与MySQL数据库交互的早期扩展。MySQL扩展提供了一个面向过程的接口,并且是针对MySQL4.1.3或者更早版
Wesley13 Wesley13
4年前
PHP扩展开发
首先需要确定系统中安装了gcc编译器,合适版本的bison等构建一个基本的扩展骨架在PHP扩展开发时,使用ext_skel完成扩展的结构骨架创建。$./ext_skel./ext_skelextnamemoduleprotofilestubsfilexmlfile
Stella981 Stella981
4年前
PHP_php.ini_说明详解
这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中。最新版本的php.ini可以在下面两个位置查看:http://cvs.php.net/viewvc.cgi/phpsrc/php.inirecommended?viewco(https://www.oschina.net/acti