如何在PHP7下安装mcrypt?Laravel需要它。

43

由于Laravel4需要mcrypt扩展程序,而PHP7似乎没有mcrypt扩展程序,这种情况是否有解决方法?


2
您已经标记了Laravel 5.1,这是Laravel的最新版本。它不需要mcrypt才能工作。请参考http://laravel.com/docs/5.1/installation以获取所需内容。 - Joel Hinz
2
你可以安装它吗?通常这是当你缺少一个库时的解决方法。 - Damien Pirsy
@JoelHinz 我把它改成了 Laravel 4。 - Bishal Paudel
@DamienPirsy 谢谢,我会尝试手动安装。 - Bishal Paudel
如果您使用的是CentOS,可访问 https://webtatic.com/packages/php70/。 - astroanu
最好不要使用mcrypt,它已经被废弃,多年没有更新,并且不支持标准的PKCS#7(原名PKCS#5)填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt存在许多未解决的错误,这些错误可以追溯到2003年。mcrypt扩展已被弃用,将在PHP 7.2中删除。相反,考虑使用defuseRNCryptor,它们提供了完整的解决方案,并得到维护和修复。 - zaph
9个回答

85

我也遇到了同样的问题 - PHP7缺少mcrypt扩展。

以下方法对我有效。在被询问时,请保留本地PHP配置文件。

sudo apt-get update
sudo apt-get install mcrypt php7.0-mcrypt
sudo apt-get upgrade

安装后请重新启动FPM(或Apache或NGINX等)。


3
我需要先执行以下命令:sudo add-apt-repository ppa:ondrej/php。该命令用于添加一个名为ondrej/php的软件源。 - user985366
2
@user985366 谢谢...是的,我们需要执行以下命令:sudo add-apt-repository ppa:ondrej/php 然后 sudo apt-get update sudo apt-get install mcrypt php7.0-mcrypt sudo apt-get upgrade 然后它就可以正常工作了。 - Osama Al-Banna
@Ryderpro 我们是否需要安装 mcrypt,当我们已经获取了 php7.0-mcrypt?或者它们完全是两个不同的东西? - enchance

29

我使用 Mac 电脑,并且使用 Laravel Valet,我用下面的方式解决了这个问题:

brew install php70-mcrypt


13

即使在php.ini中启用了mcrypt,这个问题仍可能发生。 请尝试以下步骤。

即使你在php.ini中启用了mcrypt,也有可能出现这个问题。请尝试以下步骤。

sudo apt-get update
sudo apt-get install mcrypt php7.0-mcrypt

我正在使用Ubuntu 16.04工作,以下命令也对我有帮助。

whereis php  -shows the files with this name
php -v   -shows the php version
which php -shows current php version that is running on the server

8
在Ubuntu系统中,根据launchpad.net的说法,mcrypt的包名为php7.0-mcrypt。
运行sudo apt-get install php7.0-mcrypt即可安装。

4

使用Ctrl + Alt + T打开终端,运行以下命令安装PHP7.0在Ubuntu 16.4上的mcrypt:

sudo apt-get install mcrypt php7.0-mcrypt
sudo service apache2 restart

3

PHP7有mcrypt扩展,可以在php.ini中启用它,然后一切就能正常工作了。


4
请问您能否详细说明如何安装PHP7的Mcrypt扩展呢? 我尝试查找是否有PHP7的Mcrypt扩展,但没有找到。 在PHP5中,可以使用php5-mcrypt作为Mcrypt扩展,并且可以通过php5enmod和php5dismod轻松启用和禁用。 - Bishal Paudel
1
在 /etc/php/7.0/cli/conf.d/20-mcrypt.ini 文件中,您需要检查扩展是否已启用: extension=mcrypt.so 而不是 ;extension=mcrypt.so。 - user3707264

2

按照以下步骤操作:

  1. wget http://jp2.php.net/distributions/php-7.0.3.tar.gz
  2. tar zxf php-7.0.3.tar.gz
  3. cd php-7.0.3/ext/mcrypt
  4. /php7-path/bin/phpize(如果出现错误,比如 configure: error: mcrypt.h not found. Please reinstall libmcrypt,则运行apt-get install libmcrypt-dev
  5. ./configure --with-php-config=/php7-path/bin/php-config
  6. (sudo) make && make install。这将在 php-7.0.3/ext/mcrypt/modules 中安装 mcrypt.so 库
  7. 将其复制到共享扩展目录: /usr/lib/php/20151012/
  8. 在目录 /etc/php/mods-available/ 中创建一个名为mcrypt.ini的文件,写入 extension=mcrypt.so
  9. /etc/php/7.0/fpm/conf.d 目录中创建一个链接,以此为例:sudo ln -s /etc/php/mods-available/mcrypt.ini 20-mcrypt.ini
  10. /etc/php/7.0/cli/conf.d 目录中创建一个链接,以此为例:sudo ln -s /etc/php/mods-available/mcrypt.ini 20-mcrypt.ini
  11. sudo service nginx restart
  12. sudo service php7.0-fpm restart
  13. 好了。

这对我很有帮助,因为通过apt-get安装的ppa失败了,所以谢谢!如果您能修复答案中的格式,那就太好了,因为它有点难以跟进。 - Tom Davies

1
我使用Dotdeb,这是一个额外的软件源,为Debian服务器提供最新的各种酷炫玩具,例如Nginx、PHP、MySQL、Redis等。
  1. Update your sources.list

    deb http://packages.dotdeb.org {distribution} all 
    deb-src http://packages.dotdeb.org {distribution} all
    
  2. GnuPG keys

    wget https://www.dotdeb.org/dotdeb.gpg
    sudo apt-key add dotdeb.gpg
    
  3. Update apt & build something amazing.

    sudo apt-get update
    

0

PHP7内部包含mcrypt扩展名(source-path/ext/mcrypt/)。 但它依赖于Libmcrypt软件。

步骤1。

http://mcrypt.sourceforge.net/下载libmcrypt-x.x.tar.gz并构建它。

cd libmcrypt-x.x
./configure
make
make install

步骤2。

从源代码重新构建PHP7,并添加--with-mcrypt选项。

./configure ... --with-mcrypt

不需要重新构建PHP7的其他方法

cd php7-source-path/ext/mcrypt/
/php7-path/bin/phpize
./configure --with-php-config=/php7-path/bin/php-config
make && make install
echo "extension=mcrypt.so" >> /php7-path/ext/php.ini

重启php


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