无法为PHP5获取mcrypt


29

我已经做了很多次了:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

aptitude表示已安装mcrypt。我已经重新安装了3次。自安装以来,我已经重新启动了Apache约20次。当我查看phpInfo时,没有看到列出的mcrypt。当我尝试执行我的代码时,它说mcrypt函数(选择一个-任何一个)不存在。显然未启用mcrypt。

有人知道什么地方可能出问题吗?我不知道哪块应该放在哪里以及所有这些应该如何组合在一起。

我安装了PHP 5.5.3


您是否也从包管理器(apt-get/ aptitude)安装了PHP ?软件包php5-mcrypt只能php.ini为其“知道” 的扩展配置。其次,我现在不apache2ctl重新加载模块。重新启动Apache的“正常”方式类似于sudo service apache2 restart。第三,PHP如何连接到您的Apache?如果您使用(f)cgi或php-fpm之类的工具(与mod-php相反),则除了重新启动Apache外,还可能需要自行重新启动PHP。
Henning Kockerbeck 2013年

我们使用aptitude安装了所有内容。apache2ctl停止并重新启动apache。自这些安装以来,我们已经多次重启计算机。当我说自安装了php5-mcrypt以及PHP以来,apache已“重新启动”时,请相信我。PHP5可以很好地用作apache模块-这是一个用PHP编写的网站-因此我认为PHP已作为apache模块安装。如果我转到/ etc / apache2 / mods-enabled,则php5在该列表中。我在/ etc / php5 / mods-available中看不到mcrypt,但是如果我执行sudo aptitude search mcrypt,我会看到安装了3件事:libmcypt4,mcrypt和php5-mcrypt-????
webDeveloperDave

php.ini在输出phpinfo(大约第5至第7个条目)的输出中列出了哪个?它应该是中的文件/etc/php5/。如果您在该文件中搜索mcrypt,会发生什么?
Henning Kockerbeck 2013年

php.ini位于/etc/php5/apache2/php.ini中,其中有一个带有2个设置的mcrypt部分-都已注释掉-mcrypt.algorithms_dir和mcrypt.modes_dir它们上面的注释表示默认值为/ usr / local / lib / libmcrypt-这些目录不存在。这就是首先让我误解的是,尽管aptitude表示可能没有安装mcrypt。如果我执行sudo aptitude info mcrypt,则说软件包状态已安装-版本2.6.8-1.3-它说冲突:mcrypt-那是什么意思?该软件包与自身冲突?有没有更好的方法来加密用户信息?
webDeveloperDave

您不需要关心mcrypt包裹。那是使用libmcrypt的命令行程序,PHP扩展也是如此。因此,您需要确保libmcrypt4已安装该软件包。上有php.ini摘要/etc/php5/conf.d/mcrypt.ini吗?那应该加载lib。该代码段是否由PHP加载(请参阅参考资料phpinfo)?同样,您是否尝试使用sudo service apache2 restart代替重新启动Apache apache2ctl
Henning Kockerbeck 2013年

Answers:


62

尝试这个

sudo php5enmod mcrypt

sudo service apache2 restart

工作得很好,符号链接(复制整个内容)对我来说是+1。好赞!
Stefano Mtangoo'4

4
这对我有用。但是我不需要第一个命令(ln)。我在/etc/php5/apache/conf.d文件夹中没有mcrypt.ini。运行sudo php4enmod mcrypt起作用。现在在那里存档。服务器正常工作!非常感谢。
peterept

1
感谢它的正常工作。但是我想知道您使用“ sudo php5enmod mcrypt”的命令..这是什么..?使用此命令的目的是什么?
Elavarasan 2014年

1
“ sudo php5enmod mcrypt”将在优先级编号(默认值为20)的“ /etc/php5/conf.d”目录中创建符号链接,因此您可以在不使用“ sudo php5dismod mcrypt”修改ini文件的情况下将其卸载
Vizjerai

11

我在Ubuntu 13.10上有类似的问题。运行composer安装后,它会产生相同的错误,并以结尾。

****Mcrypt PHP extension required.
Script php artisan clear-compiled handling the post-update-cmd event returned with an error

  [RuntimeException]  
  Error Output:****   

我安装mcryptphp5-mcrypt具有一定的才能,php -m但仍未显示mcrypt为已加载的扩展名:

aptitude install mcrypt
aptitude install php5-mcrypt

我跑了updatedb,然后locate mcrypt。我找到mcrypt.ini/etc/php5/conf.d。但是所有其他扩展名(如json)在/etc/php5/apache2/conf.d和中都有其.ini文件 /etc/php5/cli/conf.d。这两个都是的链接../../mods.available

所以,我当时感动mcrypt.ini/etc/php5/available-modules,并设置链接:

cd /etc/php5/cli/conf.d
ln -s ../../mods-available/mcrypt.ini 20-mcrypt.ini

和类似的/etc/php5/apache2/conf.d

瞧,它出现了php -m


非常感谢您的回答。完全把我整理出来。尽管我没有移动/etc/php5/conf.d/mcrypt.ini-我只是将符号链接设置为指向该位置,该位置也有效,并且可以确保将来自动加载对mcrypt的更新?
alexleonard 2014年

2

看起来好像缺少Apache调用PHP时加载libmcrypt的ini代码片段。应该有一个/etc/php5/apache2/conf.d/mcrypt.ini包含以下内容的文件

; configuration for php MCrypt module
extension=mcrypt.so

您应该能够从其他PHP集成的vonfigurations(例如/etc/php5/cli/conf.d/mcrypt.ini或)中复制它/etc/php5/conf.d/mcrypt.ini,具体取决于系统上安装的内容。


2

默认情况下,未启用mcrypt模块。启用mcrypt模块,然后重新启动apache(credit

sudo php5enmod mcrypt
sudo service apache2 restart

1

好吧,就是这样。看起来有时候我们正在寻找最复杂的方法来做像“ enmod”这样简单的事情;)就像布恩斯特所说: sudo php5enmod mcrypt。然后重新加载apache。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.