PHP警告:已加载模块'mcrypt'

时间:2014-02-21 01:41:54

标签: php ubuntu-12.10

当我使用PHP运行命令时,它会显示错误。例如,当我运行php -v来查看我的PHP版本时,它显示了一个错误,然后是关于PHP的信息:

  

模块'mcrypt'已在第0行的未知中加载

zied@ubuntu:~$ php -v

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

PHP 5.4.25-1+sury.org~quantal+2 (cli) (built: Feb 12 2014 11:11:30) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

4 个答案:

答案 0 :(得分:40)

您的php.ini包含以下两行或多行:

extension=mcrypt.so

删除除一个以外的所有内容。

php.ini通常位于/etc/php.ini/etc/php5/php.ini。有时会包含其他.ini文件,您可以通过以下方式查看所有文件:

$ php -i | grep .ini\$
Loaded Configuration File => /usr/local/etc/php.ini
Additional .ini files parsed => /usr/local/etc/php/extensions.ini
user_ini.filename => .user.ini => .user.ini

答案 1 :(得分:2)

有时这会发生在php-fpm,有趣的是,控制台php并没有在同一时间使用同一组.ini文件对此抱怨,证明{{1}实际上没有引用两次。

事实证明,mcrypt有一个内置的默认模块,它正在尝试加载,至少在Linux上(因为它在FreeBSD上不可重现)。 php-fpm位于此列表中,因此当用户在其mcrypt目录中有一个额外的.ini文件时,/etc/php.d似乎会加载两次。

一个严厉的解决方法是在开始时将mcrypt开关添加到php-fpm,将-n复制到pnp.ini,将所有模块包含在生成的php-fpm.ini中{1}} 除了mcrypt 并添加一个指向正确ini文件的附加开关,因此整个添加内容如下:php-fpm.ini

这样运行-n -c /etc/php-fpm.ini就不会抱怨。

我在这里写这篇文章,因为这是关于php-fpm问题的搜索引擎中最常被引用的帖子。我意识到源问题是关于控制台php。

更新:我正在使用此解决方法,但这很糟糕。前段时间我已经弄明白为什么会发生这种情况。我会花更多的话来形容这一点,但这可能很无聊,因为这将描述某种类型的失败。因此,在我的情况下,这个问题是由于我使用自己制作的自定义php构建这一事实引起的,偶尔我将 mcrypt 添加到内置静态列表中模块。 然后 我再次将其添加为内置模块,因此加载了两次。当在配置脚本的模块列表中引用 mcrypt 时,自定义构建会发生这种情况,并且未列为 shared (规范的这一部分可以很容易发现,因为mcrypt仅在规范中提到过一次)。在我的情况下,解决方案是从配置部分完全删除 mcrypt ,并将其添加到%configure \build-cgi阶段。有人可以问“fpm阶段怎么样?” - 这是一个很好的问题,但事实证明, fpm sapi本身是用最少的模块和用途构建的通用共享

答案 2 :(得分:0)

我遇到了同样的问题,这是由于使用./configure --with-mcrypt选项从源代码构建PHP。似乎如果使用--with-mcrypt标志构建PHP,则无需在extension=mcrypt.so中指定php.ini。这样做会导致上述警告。

答案 3 :(得分:0)

打开php.ini并找到extension=mcrypt.so

通过在名称扩展名;extension=mcrypt.so之前添加分号来进行注释