PHP警告:模块已在未知位置的第0行加载

109
在 Mac OSX Mavericks 上使用 Homebrew 安装的 PHP 5.5,每当我运行一个 PHP 命令时,我会收到以下错误消息(所有东西都可以正常运行,只是很烦人)。

在 Mac OSX Mavericks 上使用 Homebrew 安装的 PHP 5.5,每当我运行一个 PHP 命令时,我会收到以下错误消息(所有东西都可以正常运行,只是很烦人)

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

我跑了

php --ini

输出结果为

php --ini
PHP Warning:  Module 'intl' already loaded in Unknown on line 0

Warning: Module 'intl' already loaded in Unknown on line 0
Configuration File (php.ini) Path: /usr/local/etc/php/5.5
Loaded Configuration File:         /usr/local/etc/php/5.5/php.ini
Scan for additional .ini files in: /usr/local/etc/php/5.5/conf.d
Additional .ini files parsed:      /usr/local/etc/php/5.5/conf.d/ext-apcu.ini,
/usr/local/etc/php/5.5/conf.d/ext-igbinary.ini,
/usr/local/etc/php/5.5/conf.d/ext-intl.ini,
/usr/local/etc/php/5.5/conf.d/ext-memcached.ini,
/usr/local/etc/php/5.5/conf.d/ext-mongo.ini,
/usr/local/etc/php/5.5/conf.d/ext-uuid.ini,
/usr/local/etc/php/5.5/conf.d/ext-xdebug.ini

在php.ini文件中检查,只有顶部有一个注释掉的intl加载地方。其他文件内容大致如下:

extension="/usr/local/Cellar/php55/5.5.23/lib/php/extensions/no-debug-non-zts-20121212/intl.so"

最后一个斜杠后面的内容是文件扩展名。

我不确定还能从哪里查找。

感谢任何帮助。


5
请检查 /usr/local/etc/php/5.5/conf.d/ext-intl.ini 和 /usr/local/etc/php/5.5/php.ini 文件,很可能其中有重复的内容。 - AP 2022
尝试在php.ini文件中启用intl扩展并移除(备份)ext-intl.ini文件。 - ranieribt
2
我通过检查conf.d目录下的每个.ini文件解决了这个问题,并发现在imagick.ini中有两行相同的代码extension=imagick.so,我删掉了其中一行,问题得以解决。 - Yami Odymel
22个回答

90

我认为你可能在php.ini中两次加载了Xdebug

  1. 检查php.ini,确保没有将xdebug.so设置为extension=zend_extension=的值。

  2. 同时检查/etc/php5/apache2/etc/php5/cli/。在这些目录下的每个php.ini文件中都不应该加载扩展xdebug.so。只有一个文件php.ini应该加载它。

    注意:路径中的字符串是/etc/php5。5是PHP的版本号。因此,如果您使用另一个版本,则始终会得到不同的路径,例如php7


1
嘿,我在我的cli/php.ini中找不到xdebug,但仍然显示这些错误。 PHP Warning: PHP Startup: Unable to load dynamic library 'gd2' (tried: /usr/lib/php/20170718/gd2 (/usr/lib/php/20170718/gd2: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/gd2.so (/usr/lib/php/20170718/gd2.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 - Smit Patel
在我的电脑上(Mac,使用brew安装了PHP),当我使用pecl安装xhprof时,它会自动在php.ini文件的顶部添加extension='xhprof.so'。然后,在/usr/local/etc/php/7.2/conf.d/ext-xhprof.ini路径下还有另一个文件。将php.ini文件中的该行注释掉即可消除警告。 - Tuhin

26

我在Mac上遇到了同样的问题,即 Warning: Module 'pdo_pgsql' already loaded in Unknown on line 0

以下是我如何解决它的步骤:

  • 找到名为conf.d文件夹,我的位于目录/usr/local/etc/php/7.0/conf.d中。
  • 在这个文件夹中,有一个名为ext-pdo_pgsql.ini文件
  • 输入sudo nano ext-pdo_pgsql.ini进行编辑。
  • 应该有一行代码为extension="/usr/local/opt/php70-pdo-pgsql/pdo_pgsql.so"。通过在行开头添加分号来注释掉它,例如:;extension="/usr/local/opt/php70-pdo-pgsql/pdo_pgsql.so"
  • 保存文件。(我通常使用control+Ocontrol+M)。
  • 退出文件(control+X)。

希望这对某些人有所帮助。


3
这个方法对我在Ubuntu 18.04上解决了'mongodb'的问题。我在/etc/php/7.2/apache2/conf.d目录中找到了mongodb类似的文件。 - Muhammed Shihabudeen Labba A
1
对我来说,使用pgsql.ini同样有效。 - 128KB

17
为了解决这个问题,您需要编辑您的php.ini(或extensions.ini)文件,并注释掉已经编译好的扩展。例如,在编辑后,您的ini文件可能看起来像下面的行:
;extension=pcre.so
;extension=spl.so

Source: http://www.somacon.com/p520.php


这是正确的。在我的情况下,我调用了两次mysqli扩展,所以我注释掉了其中一个,一切恢复正常了。 - Badmous

12
你应该拥有一个/etc/php2/conf.d目录(在Ubuntu上至少是这样),其中包含一堆.ini文件,当php运行时全部被加载。这些文件可能包含与php.ini中的设置冲突的重复设置。在我的PHP安装中,我注意到一个名为conf.d/20-intl.ini的文件,其中包含一个extension=intl.so的设置。我敢打赌这就是你的冲突所在。

你可以使用 php --ini | grep intl 命令查找模块的额外 ini 文件,并检查 php.ini 文件是否有 extension=intl.so。作为解决方案,你可以在 php.ini 中注释后者或删除第一个命令中显示的文件。 - Guilherme Sampaio

7

通过注释掉extension=curl解决


6
在我的情况下,我已经在php.ini中取消注释了;extension=php_curl.so,但Ubuntu已经在其他地方调用了这个扩展程序。
要找到这个“其他地方”,需要查看php.ini。在我的情况下:/etc/php/7.1/apache2/conf.d/20-curl.ini是路径。
现在我们需要编辑这个文件(终端):
sudo nano /etc/php/7.1/apache2/conf.d/20-curl.ini

将 ;extension=php_curl.so 注释掉

保存文件并重启 Apache:

sudo systemctl restart apache2

3

对于共享托管,我在cPanel中取消了“选择PHP版本”>“扩展”下的有问题的模块,并且在PHP 7.4下该错误已经消失。


3
For issue related to code igniter project upload,
go to the base directory index.php and add this code:

if ($_SERVER['SERVER_NAME'] == 'local_server_name') {
    define('ENVIRONMENT', 'development');
} else {
    define('ENVIRONMENT', 'production');
}

if (defined('ENVIRONMENT')){
    switch (ENVIRONMENT){
        case 'development':
            error_reporting(E_ALL);
        break;

        case 'testing':
        case 'production':
            error_reporting(0);
        break;

        default:
            exit('The application environment is not set correctly.');
    }
}


    define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

1
虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题,将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Brian61354270

2
在从 Fedora Server 24 (PHP 5) 升级到 25 (PHP 7) 后,我遇到了同样的问题。经过调查,我发现 /etc/php.d/ 目录下有两个不同的 .ini 文件在加载 extension=geoip.so。
之前版本的 distros 使用的是名为 50-geoip.ini 的文件,但最近改为了 40-geoip.ini,我怀疑在版本升级过程中旧文件没有被删除,而新文件已经被创建。
这就是问题的实际原因。将 /etc/php.d/ 目录下多余的 50-geoip.ini 删除并重启 httpd 后,问题完美解决。

1
我在 /etc/php5/cli/conf.d 中删除了 20-mongo.ini 文件,这解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接