PHP警告:模块'mcrypt'已经加载
当我使用PHP运行命令时,它显示错误。例如,当我运行php -v
看到我的PHP版本的它为我的错误,那么关于PHP的信息:PHP警告:模块'mcrypt'已经加载
模块“mcrypt的”已装入未知在线0
[email protected]:~$ 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
你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
禁用错误报告,你可以按照以下的index.php文件禁用它。
case 'development':
error_reporting(-1);
ini_set('display_errors', 0);
break;
“我得到错误!帮助”...“好的没问题......只是忽略它们,它们没有任何意义。”除了这个特别愚蠢的回答,为什么你只能在开发过程中禁用错误。您主张开发人员应该在开发过程中忽略错误,并且只在您的系统上线时才显示它们。 –
不好的建议,我同意。有趣的是,'error_reporting(-1)'实际上大部分相当于'error_reporting(E_ALL)'。当然,它们仍然不会显示'display_errors = off'。如果你真的想禁用错误报告(为什么!?),它将是'error_reporting(0)'。 – helmbert
有时候,这是与php-fpm
,而有趣的是,控制台php
不complans这个使用相同的一组在同一时间的.ini,文件,证明mcrypt
其实没有被引用两次。
事实证明,php-fpm
有一个默认的内置模块,至少在Linux上(因为它在FreeBSD上不可重现),它试图加载。 mcrypt
位于此列表中,因此当用户在/etc/php.d
目录中具有其他.ini文件时,mcrypt
似乎已加载两次。
这方面的一个苛刻的解决方法是添加-n
开关对启动PHP-FPM,复制pnp.ini
到php-fpm.ini
,包括所有的模块到所得php-fpm.ini
除了mcrypt的和添加额外的开关指向正确的ini文件,因此整个添加如下所示:-n -c /etc/php-fpm.ini
。
这种方式运行php-fpm
不会抱怨。
我在这里写这篇文章,因为这是在搜索引擎中最引用的帖子,关于mcrypt
问题。我意识到源代码问题是关于控制台的PHP。
更新:我正在使用此解决方法,但它是讨厌的。前一段时间,我已经弄清楚为什么会发生这种情况。我会花更多的话来描述这一点,但这可能很无聊,因为这将描述某种类型的故障。因此,在我的情况下,这个问题是由于我使用由我自己制作的自定义php版本造成的,偶尔我已将mcrypt添加到内置静态模块的列表中。和然后我再次添加它作为内置模块,所以它被加载两次。这发生在自定义生成mcrypt在配置脚本的模块列表中引用,并没有列为共享(这部分规范可以很容易地找到,因为%configure \
在提到只有一次规格)。在我的情况下,解决方案是完全从配置部分删除mcrypt,并将其添加到build-cgi
和build-ztscli
阶段。人们可以问“fpm舞台怎么样?” - 这是一个很好的问题,但事实证明,fpm sapi本身是用最少的模块构建的,并且使用通用的共享的个。
我有同样的问题,这是由于从源代码构建PHP与./configure --with-mcrypt
选项。看起来如果PHP是用--with-mcrypt
标志构建的,那么就不需要在php.ini
中指定extension=mcrypt.so
。这样做会导致上述警告。
非常感谢,我删除了**/etc/php5/mods-available/mcrypt.ini **中的** extension = mcrypt.so **,现在错误消失thnx –