如何在 Ubuntu 上安装 PHP 7.3.3 的 mcrypt 扩展

13

我尝试遵循:PHP警告:PHP启动时无法加载动态库'mcrypt.so'

sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install php7.2-dev
sudo apt-get -y install libmcrypt-dev
sudo pecl install mcrypt-1.0.1
我理解为:

我得到:

pecl/mcrypt requires PHP (version >= 7.2.0, version <= 7.3.0, excluded versions: 7.3.0), installed version is 7.3.3-1+ubuntu14.04.1+deb.sury.org+1
No valid packages found
install failed

我使用 PrestaShop,需要这个。


5
mcrypt依赖于libmcrypt,该库自2007年以来已经停止维护。请改用openssl。 - RiggsFolly
3
我将尽力进行翻译,以使内容易于理解,但不会改变原意。以下是需要翻译的内容链接:https://www.php.net/manual/en/migration71.deprecated.php - RiggsFolly
1
将Prestashop分区以升级并摆脱Mcrypt,他们已经有多年时间做到这一点,但仍未能如此。我无论如何都不会信任Prestashop,因为他们不能为其购物系统的关键部分更改库而做出简单的努力。记住,使用已弃用的过时旧代码的软件运行的风险就在于你。 - Geoffrey
4个回答

34

如果有人正在使用AWS Bitnami安装程序并且PHP版本为7.3.10,则以下是具有适当文件路径的布局(参考下面列出的内容)

检查您的PHP版本

$ php -version

安装 mcrypt 扩展

$ sudo apt-get -y install gcc make autoconf libc-dev pkg-config
$ sudo apt-get -y install libmcrypt-dev

如果PHP版本大于7.3.0

$ sudo pecl install mcrypt-1.0.2

或者最新版本:https://pecl.php.net/package/mcrypt

如果 php 版本 <= 7.3.0

$ sudo pecl install mcrypt-1.0.1
当您看到提示时(按[Enter]以自动检测)
> libmcrypt prefix? [autodetect] :

在 php.ini 中启用 mcrypt -> 检查是否已经在 php.ini 中并可能只需要取消注释

$ more /opt/bitnami/php/etc/php.ini | grep mcrypt
;extension=mcrypt.so

在php.ini中添加或取消注释extension=mcrypt.so

$ emacs /opt/bitnami/php/etc/php.ini

参考资料...

如何在PHP 7.2中安装mcrypt扩展

如何在Ubuntu上安装PHP 7.3.3中的mcrypt

这里有一个关于如何在Linux上安装mcrypt的答案


1
一些说明:(1)我需要安装php7.3-dev才能使其正常工作。OP提到了它,但在任何答案中都没有提到。此外,我更喜欢像这样安装模块:bash -c "echo extension=/path/to/mcrypt.so > /etc/php/7.3/mods-available/mcrypt.ini" 然后 phpenmod mcrypt - But those new buttons though..
就此而言,这是最好的答案,但需要更新为:如果php版本> = 7.2.0,版本<= 7.4.0。我刚试图在7.4.7上使用这些命令进行安装,但出现了以下错误:pecl / mcrypt需要PHP(版本> = 7.2.0,版本<= 7.4.0,排除版本:7.4.0),已安装版本为7.4.7。 - stevenbranigan82
@stevenbranigan82 对于 PHP > 7.4,您需要安装下一个版本 sudo pecl install mcrypt-1.0.3 - Kevin Lynch

17

您需要安装版本1.0.2。

错误信息明确告诉您1.0.1仅支持PHP 7.2,不支持7.3。

这些都在官方pecl/mcrypt页面上有详细说明

版本 1.0.2:

PHP 版本:PHP 版本 7.4.0 或更早版本

PHP 版本:PHP 7.2.0 或更高版本

PEAR 包:PEAR 1.4.0 或更高版本

版本 1.0.1:

PHP 版本:PHP 版本 7.3.0 或更早版本

PHP 版本:PHP 7.2.0 或更高版本

PEAR 包:PEAR 1.4.0 或更高版本


3
只因为你可以做到,并不意味着你应该这样做 :) 以下是需要翻译的内容链接:https://www.php.net/manual/en/migration71.deprecated.php - RiggsFolly
有一个选项:https://github.com/PrestaShop/PrestaShop/commit/80ecf62a30fbd2521007ad3eee441d055aa49c36#diff-520d48568b8aff46bd7f612f3f425783。即使如此,他们在这里的做法仍然不正确,因为他们没有以安全的方式填充/打包加密数据(HMAC签名等)。 - Geoffrey

7

使用这个,在php-7.3中完美运作:

sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install libmcrypt-dev
sudo pecl install mcrypt-1.0.1

自动检测:按回车键

sudo bash -c "echo extension=/usr/lib/php/[folder in your pc]/mcrypt.so > /etc/php/7.3/cli/conf.d/mcrypt.ini"

sudo bash -c "echo extension=/usr/lib/php/[folder in your pc]/mcrypt.so > /etc/php/7.3/apache2/conf.d/mcrypt.ini"

php -i | grep mcrypt


完成你的回答,需要执行以下操作:sudo bash -c "echo extension=/usr/lib/php/[你电脑上的文件夹]/mcrypt.so > /etc/php/7.3/mods-available/mcrypt.ini" 这样,php 才能找到这个模块。 - bbruno5

2

我已经在PHP版本: 7.4.3 Ubuntu版本: 20.04.1 LTS和nginx中解决了相同的问题。

sudo apt-get install php-pear php7.4-dev
sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install libmcrypt-dev

您可以根据php版本选择您的mcrypt版本 阅读

  sudo pecl install mcrypt-1.0.4

当您看到提示时
libmcrypt prefix? [autodetect] :

按[Enter]自动检测。

输出结果将类似于以下内容。

Build process completed successfully
Installing '/usr/lib/php/20190902/mcrypt.so'
install ok: channel://pecl.php.net/mcrypt-1.0.4
configuration option "php_ini" is not set to php.ini location
You should add "extension=mcrypt.so" to php.ini

成功使用pecl安装mcrypt后,您应该在php.ini中添加extension=/usr/lib/php/20190902/mcrypt.so扩展。

我已经在以下文件中添加了extension=/usr/lib/php/20190902/mcrypt.so:

  1. /etc/php/7.4/fpm/php.ini
  2. /etc/php/7.4/cli/php.ini

重新启动您的nginx,因为我正在使用nginx。

systemctl restart nginx

您可以重新启动php-fpm。
sudo service php7.4-fpm restart

最后,如何验证是否已安装了mycrpt(注意关闭终端并重新打开)?
 php -m | grep mcrypt

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