PHP模块已经加载警告

时间:2016-07-04 08:30:26

标签: php configuration-files php-extension

刚才注意到,当在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文件中删除此行是解决方案还是只是解决方法以避免出现警告消息?由此会产生任何副作用吗?为什么会发生/实际上由什么引起的问题?

8 个答案:

答案 0 :(得分:4)

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

你可以搜索文件夹/etc/php/7.0,你会在其子文件夹中找到php.ini文件,最有可能是:

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

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

答案 1 :(得分:3)

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中的文件。我发现它变得杂乱无章。

答案 2 :(得分:2)

PHP正在多次加载模块。查找并删除额外的php.ini文件。

  1. 执行以下php文件。它将在表格中打印有关您的php安装的大量信息:
  2. <?php
    phpinfo();
    
    1. 在表格中,找到“已加载配置文件”的条目。它会告诉您php.ini的位置。转到磁盘并将其重命名为php.ini.bak
    2. 重新启动服务器并再次执行上面的文件。 “已加载的配置文件”将告诉您其他php.ini的位置。这是副本。
    3. 备份并删除副本。重新恢复原作,你应该很高兴。

答案 3 :(得分:0)

检查/etc/php5/apache2/php.ini和/etc/php5/cli/php.ini。你不应该在这个目录中的每个php.ini中加载扩展名xdebug.so。只有一个php.ini应该加载它。 PHP Warning: Module already loaded in Unknown on line 0

答案 4 :(得分:0)

我遇到了同样的问题。我已经更新了我的PHP版本并清除了问题。

出于某种原因,问题源于composer.lock文件的不连贯状态。在作曲家更新之后(当然还要运行我的所有单元测试以确保没有任何内容被破坏),错误消失了,作曲家运行也很干净。

答案 5 :(得分:0)

当我使用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

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)

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