2014-02-21 33 views
14

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

回答

35

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 
+6

非常感谢,我删除了**/etc/php5/mods-available/mcrypt.ini **中的** extension = mcrypt.so **,现在错误消失thnx –

-10

禁用错误报告,你可以按照以下的index.php文件禁用它。

case 'development': 
     error_reporting(-1); 
     ini_set('display_errors', 0); 
break; 
+8

“我得到错误!帮助”...“好的没问题......只是忽略它们,它们没有任何意义。”除了这个特别愚蠢的回答,为什么你只能在开发过程中禁用错误​​。您主张开发人员应该在开发过程中忽略错误,并且只在您的系统上线时才显示它们。 –

+1

不好的建议,我同意。有趣的是,'error_reporting(-1)'实际上大部分相当于'error_reporting(E_ALL)'。当然,它们仍然不会显示'display_errors = off'。如果你真的想禁用错误报告(为什么!?),它将是'error_reporting(0)'。 – helmbert

1

有时候,这是与php-fpm,而有趣的是,控制台php不complans这个使用相同的一组在同一时间的.ini,文件,证明mcrypt其实没有被引用两次。

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

这方面的一个苛刻的解决方法是添加-n开关对启动PHP-FPM,复制pnp.iniphp-fpm.ini,包括所有的模块到所得php-fpm.ini除了mcrypt的和添加额外的开关指向正确的ini文件,因此整个添加如下所示:-n -c /etc/php-fpm.ini

这种方式运行php-fpm不会抱怨。

我在这里写这篇文章,因为这是在搜索引擎中最引用的帖子,关于mcrypt问题。我意识到源代码问题是关于控制台的PHP。

更新:我正在使用此解决方法,但它是讨厌的。前一段时间,我已经弄清楚为什么会发生这种情况。我会花更多的话来描述这一点,但这可能很无聊,因为这将描述某种类型的故障。因此,在我的情况下,这个问题是由于我使用由我自己制作的自定义php版本造成的,偶尔我已将mcrypt添加到内置静态模块的列表中。和然后我再次添加它作为内置模块,所以它被加载两次。这发生在自定义生成mcrypt在配置脚本的模块列表中引用,并没有列为共享(这部分规范可以很容易地找到,因为%configure \在提到只有一次规格)。在我的情况下,解决方案是完全从配置部分删除mcrypt,并将其添加到build-cgibuild-ztscli阶段。人们可以问“fpm舞台怎么样?” - 这是一个很好的问题,但事实证明,fpm sapi本身是用最少的模块构建的,并且使用通用的共享的个。

0

我有同样的问题,这是由于从源代码构建PHP与./configure --with-mcrypt选项。看起来如果PHP是用--with-mcrypt标志构建的,那么就不需要在php.ini中指定extension=mcrypt.so。这样做会导致上述警告。

相关问题