刚才注意到,PHP在CLI上执行时会抛出警告:
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
我知道,如何防止它们——只需从/etc/php/7.0/cli/conf.d/{extname}.ini
文件中删除extension={extname}.so
。但是:
删除INI文件中的这一行是解决方案还是仅仅是避免警告消息的变通方法?会有副作用吗?为什么会发生/问题实际上是由什么引起的?
您可能已经在php.ini文件中加载了两次显示的扩展名。
你可以搜索/etc/php/7.0文件夹,你会在它的子文件夹中找到php.ini文件,最有可能在:
- /etc/php/7.0/cli/
- /etc/php/7.0/输入/
如果看到一些扩展名=什么。所以在php.ini文件中重复两次,你可以从其中一个文件中删除它,或者如果仍然显示警告,从两个文件中删除。
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
Little walk through PHP扫描了文件夹/etc/php/7.0/cli/
,发现了一个php.ini
,它告诉它在一个名为conf.d
的子目录中应该有更多的配置(ini)文件,每个模块都有自己的ini文件,通常在Linux和后来的PHP版本中。
回答"在INI文件中删除这一行是一个解决方案还是只是一个避免警告消息的变通方法?"
老实说,我喜欢将每个模块的配置放在单独的文件中,但是如果您希望在php.ini
文件中配置模块,则可以删除conf.d
中的文件。我只是觉得有点乱
PHP正在多次加载模块。查找并删除额外的php.ini
文件。
- 执行以下php文件。它将在一个表中打印大量关于php安装的信息:
.
<?php
phpinfo();
- 在表中找到"Loaded Configuration File"的条目。它会告诉你
php.ini
的位置。进入磁盘并将其重命名为php.ini.bak
。 重新启动服务器并再次执行上面的文件。"Loaded Configuration File"将告诉您另一个
php.ini
的位置。这是复制品。备份并删除副本。恢复原来的,你应该很好。 当我使用sudo apt-get install php-mbstring
安装php-mbstring
并在php.ini
中启用extension=mbstring
时,发生了这种情况。
PHP看两个mbstring
插件。一个在php.ini
;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
检查/etc/php5/apache2/php.ini和/etc/php5/cli/php.ini。不应该在这个目录下的每个php.ini中加载扩展名xdebug.so。只有一个php.ini应该加载它。PHP警告:第0行
我也遇到了同样的问题。我已经更新了我的PHP版本并清除了这个问题。
由于某种原因,这个问题是由composer.lock
文件的不一致状态引起的。在编译器更新之后(当然要运行我所有的单元测试以确保没有任何破坏),错误消失了,编译器运行干净了。
只是给那些登陆这个页面的人一点提示。
- 检查phpinfo()加载的配置文件;
- 检查终端加载的配置文件php -i命令检查上面的两个php.ini文件。只在phpinfo()中取消/启用PHP .ini中的intl扩展名,并在PHP .ini文件中注释/禁用PHP -i中显示的行代码用于php配置的是来自phpinfo() 的那个
- 不要忘记重启web服务器和php在我的情况下,我使用nginx和php 7.4。sudo systemctl restart nginx"sudo service php7.4-fpm restart"
从cpanel降级你的PHP版本!