PHP 模块已加载警告

问题描述 投票:0回答:9

刚刚注意到,在 CLI 上执行时 PHP 会抛出警告:

php 模块已加载

$ php -v
PHP Warning:  Module 'PDO' already loaded in Unknown on line 0
PHP Warning:  Module 'calendar' already loaded in Unknown on line 0
PHP Warning:  Module 'ctype' already loaded in Unknown on line 0
PHP Warning:  Module 'exif' already loaded in Unknown on line 0
PHP Warning:  Module 'fileinfo' already loaded in Unknown on line 0
PHP Warning:  Module 'ftp' already loaded in Unknown on line 0
PHP Warning:  Module 'gettext' already loaded in Unknown on line 0
PHP Warning:  Module 'iconv' already loaded in Unknown on line 0
PHP Warning:  Module 'Phar' already loaded in Unknown on line 0
PHP Warning:  Module 'posix' already loaded in Unknown on line 0
PHP Warning:  Module 'shmop' already loaded in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/sockets.so' - /usr/lib/php/20151012/sockets.so: undefined symbol: php_network_gethostbyname in Unknown on line 0
PHP Warning:  Module 'sysvmsg' already loaded in Unknown on line 0
PHP Warning:  Module 'sysvsem' already loaded in Unknown on line 0
PHP Warning:  Module 'sysvshm' already loaded in Unknown on line 0
PHP Warning:  Module 'tokenizer' already loaded in Unknown on line 0
PHP 7.0.3-5+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0RC4, Copyright (c) 2002-2016, by Derick Rethans

我知道如何防止它们 - 只需从

extension={extname}.so
文件中删除
/etc/php/7.0/cli/conf.d/{extname}.ini
即可。但是:

删除 INI 文件中的这一行是解决方案还是只是避免警告消息的解决方法?由此会产生任何副作用吗?为什么会发生/问题实际上是什么引起的?

php configuration-files php-extension
9个回答
8
投票

您可能已在 php.ini 文件中加载了两次显示的扩展。

您可以搜索文件夹 /etc/php/7.0,您将在其子文件夹中找到 php.ini 文件,最有可能位于:

  • /etc/php/7.0/cli/
  • /etc/php/7.0/apache2/

如果您看到某些 extension=something.so 在这些 php.ini 文件中重复两次,您可以将其从一个文件中删除,或者如果警告仍然显示从两个文件中删除。


5
投票

Linux 上的 PHP 通常会扫描子文件夹以获取更多配置文件,这就是本例中发生的情况。

Configuration File (php.ini) Path => /etc/php/7.0/cli Loaded
Configuration File => /etc/php/7.0/cli/php.ini Scan this dir for additional .ini files => /etc/php/7.0/cli/conf.d 
Additional .ini files parsed => 
  /etc/php/7.0/cli/conf.d/10-opcache.ini,
  /etc/php/7.0/cli/conf.d/10-pdo.ini,
  /etc/php/7.0/cli/conf.d/20-calendar.ini,
  /etc/php/7.0/cli/conf.d/20-ctype.ini,
  /etc/php/7.0/cli/conf.d/20-curl.ini,
  /etc/php/7.0/cli/conf.d/20-exif.ini,
  /etc/php/7.0/cli/conf.d/20-fileinfo.ini,
  /etc/php/7.0/cli/conf.d/20-ftp.ini,
  /etc/php/7.0/cli/conf.d/20-gettext.ini,
  /etc/php/7.0/cli/conf.d/20-iconv.ini,
  /etc/php/7.0/cli/conf.d/20-json.ini,
  /etc/php/7.0/cli/conf.d/20-mcrypt.ini,
  /etc/php/7.0/cli/conf.d/20-mongodb.ini,
  /etc/php/7.0/cli/conf.d/20-mysqli.ini,
  /etc/php/7.0/cli/conf.d/20-pdo_mysql.ini,
  /etc/php/7.0/cli/conf.d/20-pdo_sqlite.ini,
  /etc/php/7.0/cli/conf.d/20-phar.ini,
  /etc/php/7.0/cli/conf.d/20-posix.ini,
  /etc/php/7.0/cli/conf.d/20-readline.ini,
  /etc/php/7.0/cli/conf.d/20-shmop.ini,
  /etc/php/7.0/cli/conf.d/20-sockets.ini,
  /etc/php/7.0/cli/conf.d/20-sqlite3.ini,
  /etc/php/7.0/cli/conf.d/20-sysvmsg.ini,
  /etc/php/7.0/cli/conf.d/20-sysvsem.ini,
  /etc/php/7.0/cli/conf.d/20-sysvshm.ini,
  /etc/php/7.0/cli/conf.d/20-tokenizer.ini,
  /etc/php/7.0/cli/conf.d/20-xdebug.ini,
  /etc/php/7.0/cli/conf.d/20-xsl.ini

稍微浏览一下 PHP 扫描文件夹

/etc/php/7.0/cli/
,发现一个
php.ini
,它告诉它在名为
conf.d
的子目录中应该有更多配置(ini)文件,每个模块都有自己的 ini 文件,通常在 Linux 和PHP 的更高版本。

回答问题“删除 INI 文件中的这一行是解决方案还是只是避免警告消息的解决方法?”

老实说,我喜欢将每个模块的配置放在单独的文件中,但是如果您希望在

conf.d
文件中配置模块,则可以删除
php.ini
中的文件。我只是发现它变得混乱。


4
投票

当我使用

php-mbstring
安装
sudo apt-get install php-mbstring
并在我的
extension=mbstring
中启用
php.ini
时,就发生了这种情况。

PHP 看两个

mbstring
插件。第一个在已安装的包中,第二个在 php.ini 中启用的包中

解决方案是禁用 php.ini 中的插件

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring

3
投票

PHP 多次加载模块。找到并删除多余的

php.ini
文件。

  1. 执行以下 php 文件。它会在表格中打印有关您的 php 安装的大量信息:

.

<?php
phpinfo();
  1. 在表中,找到“加载的配置文件”条目。它会告诉您
    php.ini
    位于哪里。转到磁盘并将其重命名为
    php.ini.bak
  2. 重新启动服务器并再次执行上面的文件。 “加载的配置文件”会告诉您另一个
    php.ini
    所在的位置。 那是重复的。
  3. 备份并删除重复项。恢复原来的状态,你应该很乐意这样做。

0
投票

检查 /etc/php5/apache2/php.ini 和 /etc/php5/cli/php.ini。您不应在此目录中的每个 php.ini 中加载扩展 xdebug.so。只有一个 php.ini 应该加载它。 PHP 警告:模块已在第 0 行未知加载


0
投票

我也有同样的问题。我已经更新了我的 PHP 版本并解决了这个问题。

由于某种原因,该问题是由于

composer.lock
文件的状态不一致而产生的。在 Composer 更新后(当然还运行了所有单元测试以确保没有任何问题),错误消失了,Composer 运行也干净了。


0
投票

只是给那些登陆此页面的人一个提示。

  • 检查用phpinfo()加载的配置文件;
  • 检查终端 php -i 命令中加载的配置文件 检查上面的两个 php.ini 文件。仅取消注释/启用 phpinfo() 显示的 php.ini 中的 intl 扩展,并注释/禁用 php -i 显示的 php.ini 文件中的行代码 用于 php 配置的是来自 phpinfo() 的那个
  • 不要忘记重新启动网络服务器和 php 就我而言,我使用的是 nginx 和 php 7.4。 “须藤systemctl重新启动nginx” “sudo服务php7.4-fpm重新启动”

0
投票

从 /usr/local/etc/php/7.4/php.ini 中删除扩展名=“ftp.so”


-1
投票

只需从 cpanel 降级您的 PHP 版本即可!

© www.soinside.com 2019 - 2024. All rights reserved.