PHP Warning: Module 'redis' already loaded in Unknown on line 0

今天在编译好php7.3.4的时候,因为编译时候没有安装php 的redis和mcrypt扩展,安装好后,在php.ini 中添加 好 extension="redis.so" extension="mcrypt.so" 然后使用 php -m 查看模块,报...

今天在编译好php7.3.4的时候,因为编译时候没有安装php 的redis和mcrypt扩展,安装好后,在php.ini 中添加 好

extension="redis.so"

extension="mcrypt.so"


然后使用 php -m 查看模块,报如下警告:

PHP Warning:  Module 'redis' already loaded in Unknown on line 0

PHP Warning:  Module 'mcrypt' already loaded in Unknown on line 0


意思这个两个模块重复加载了, 网上查到的都是说,

一种是配置文件里面重复加载了 这两个模块,我把php所有文件都搜索了一边,根本不可能有重复加载。

第二种是php编译的时候加载了这个模块,然后php.ini 又动态加载了一边,但是我手动注销了php.ini 的模块后,php -m 随即就看不到了这两个模块。这也说明模块不可能是编译进去了,通过 php -i|grep configure 查看也可以看到,编译选项里面是没有上面两个模块的。


那问题处在哪里呢?


难道是版本的bug, 查了网上,没有说这个版本有这样bug呀。


后来我仔细检查了编译选项中,有这两个编译选项:


'--with-config-file-path=/usr/local/php/etc'               '--with-config-file-scan-dir=/usr/local/php/etc'

这两个选项都是指定php的配置文件路径的。

--with-config-file-path=/usr/local/php/etc     设定在此目录下可以找到php.ini 文件

--with-config-file-scan-dir=/usr/local/php/etc  设置在此目录下扫描*.ini “附加”配置文件。


而在 /usr/local/php/etc 目录下两个选项都找到了php.ini 文件  这个可以通过 php --ini 打印出来:



Configuration File (php.ini) Path: /usr/local/php/etc

Loaded Configuration File:         /usr/local/php/etc/php.ini

Scan for additional .ini files in: /usr/local/php/etc

Additional .ini files parsed:      /usr/local/php/etc/mcrypt.ini,

/usr/local/php/etc/php.ini,

/usr/local/php/etc/redis.ini


很明显两者都找到了php.ini 文件,这就加载了两次php.ini 文件,既然知道了原因,修改起来就好办了。

--with-config-file-scan-dir=/usr/local/php/etc    是扫描的“附加”的配置文件,那么,把模块加载拆分出来放到 其他命名的 ini文件中,
比如:redis.ini 文件,里面放入:extension="redis.so"          ,mcrypt.ini 里面放入:extension="mcrypt.so" 


然后重新加载php就正常了。

当让如果想避免上述问题,编译php的时候,'--with-config-file-path=/usr/local/php/etc'               '--with-config-file-scan-dir=/usr/local/php/etc'

选择一个就可以了,选择一个就不会出现上述问题。




  • 发表于 2021-09-30 00:48
  • 阅读 ( 45 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章