安装php7.2-mcrypt时出现的问题

39

我正在尝试从PHP 7.2.X版本加载mcrypt扩展模块。
因此,我尝试使用与当前PHP版本兼容的PECL库来安装,并遵循此链接: 在安装期间安装mcrypt到PHP 7.2

这些是在终端上执行某些命令后获得的结果。

root@YYY:/var/www/html/orocrm# apt install php-pear
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libllvm4.0
Use 'sudo apt autoremove' to remove it.
The following NEW packages will be installed:
  php-pear
0 upgraded, 1 newly installed, 0 to remove and 14 not upgraded.
Need to get 285 kB of archives.
After this operation, 2,107 kB of additional disk space will be used.
Get:1 http://ppa.launchpad.net/ondrej/php/ubuntu xenial/main amd64 php-pear all 1:1.10.5+submodules+notgz-1+ubuntu16.04.1+deb.sury.org+1 [285 kB]
Fetched 285 kB in 1s (230 kB/s)   
Selecting previously unselected package php-pear.
(Reading database ... 215503 files and directories currently installed.)
Preparing to unpack .../php-pear_1%3a1.10.5+submodules+notgz-1+ubuntu16.04.1+deb.sury.org+1_all.deb ...
Unpacking php-pear (1:1.10.5+submodules+notgz-1+ubuntu16.04.1+deb.sury.org+1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up php-pear (1:1.10.5+submodules+notgz-1+ubuntu16.04.1+deb.sury.org+1) ...

YYY@YYY:/var/www/html/orocrm$ sudo apt-get -y install gcc make autoconf libc-dev pkg-config
[sudo] password for YYY: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'libc6-dev' instead of 'libc-dev'
gcc is already the newest version (4:5.3.1-1ubuntu1).
make is already the newest version (4.1-6).
pkg-config is already the newest version (0.29.1-0ubuntu1).
libc6-dev is already the newest version (2.23-0ubuntu9).
The following package was automatically installed and is no longer required:
  libllvm4.0
Use 'sudo apt autoremove' to remove it.
Suggested packages:
  autoconf-archive gnu-standards autoconf-doc libtool
The following NEW packages will be installed:
  autoconf automake autotools-dev libsigsegv2 m4
0 upgraded, 5 newly installed, 0 to remove and 14 not upgraded.
Need to get 1,079 kB of archives.
After this operation, 3,998 kB of additional disk space will be used.
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 libsigsegv2 amd64 2.10-4 [14.1 kB]
Get:2 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 m4 amd64 1.4.17-5 [195 kB]
Get:3 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 autoconf all 2.69-9 [321 kB]
Get:4 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 autotools-dev all 20150820.1 [39.8 kB]
Get:5 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 automake all 1:1.15-4ubuntu1 [510 kB]
Fetched 1,079 kB in 2s (447 kB/s) 
Selecting previously unselected package libsigsegv2:amd64.
(Reading database ... 215198 files and directories currently installed.)
Preparing to unpack .../libsigsegv2_2.10-4_amd64.deb ...
Unpacking libsigsegv2:amd64 (2.10-4) ...
Selecting previously unselected package m4.
Preparing to unpack .../archives/m4_1.4.17-5_amd64.deb ...
Unpacking m4 (1.4.17-5) ...
Selecting previously unselected package autoconf.
Preparing to unpack .../autoconf_2.69-9_all.deb ...
Unpacking autoconf (2.69-9) ...
Selecting previously unselected package autotools-dev.
Preparing to unpack .../autotools-dev_20150820.1_all.deb ...
Unpacking autotools-dev (20150820.1) ...
Selecting previously unselected package automake.
Preparing to unpack .../automake_1%3a1.15-4ubuntu1_all.deb ...
Unpacking automake (1:1.15-4ubuntu1) ...
Processing triggers for install-info (6.1.0.dfsg.1-5) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for doc-base (0.10.7) ...
Processing 1 added doc-base file...
Setting up libsigsegv2:amd64 (2.10-4) ...
Setting up m4 (1.4.17-5) ...
Setting up autoconf (2.69-9) ...
Setting up autotools-dev (20150820.1) ...
Setting up automake (1:1.15-4ubuntu1) ...
update-alternatives: using /usr/bin/automake-1.15 to provide /usr/bin/automake (automake) in auto mode
Processing triggers for libc-bin (2.23-0ubuntu9) ...

YYY@YYY:/var/www/html/orocrm$ sudo apt-get -y install libmcrypt-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libllvm4.0
Use 'sudo apt autoremove' to remove it.
The following NEW packages will be installed:
  libmcrypt-dev
0 upgraded, 1 newly installed, 0 to remove and 14 not upgraded.
Need to get 83.7 kB of archives.
After this operation, 438 kB of additional disk space will be used.
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/universe amd64 libmcrypt-dev amd64 2.5.8-3.3 [83.7 kB]
Fetched 83.7 kB in 0s (105 kB/s)       
Selecting previously unselected package libmcrypt-dev.
(Reading database ... 215484 files and directories currently installed.)
Preparing to unpack .../libmcrypt-dev_2.5.8-3.3_amd64.deb ...
Unpacking libmcrypt-dev (2.5.8-3.3) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up libmcrypt-dev (2.5.8-3.3) ...

YYY@YYY:/var/www/html/orocrm$ sudo pecl7.2-sp install --nodeps mcrypt-snapshot
sudo: pecl7.2-sp: command not found

由于出现了pecl7.2-sp: command not found的错误,根据文档部分所述,该命令已被弃用,并且从PHP 7.2.X版本开始不再提供支持,这是为了考虑安全性。

但是某些项目需要这些依赖项才能按照必要的方式执行所需的功能。我该如何解决上述问题?


更新:

简而言之:

我得到了很多来自答案投票的回应。答案需要根据操作系统架构级别进行分类。由于我正在使用共享服务器进行托管,因此有多个项目驻留在其中,并使用PHP 5.X.X版本编码,因此我决定降级到默认支持mcrypt扩展的PHP 7.1.X。

正如我在安装mcrypt扩展到PHP 7.2中所提到的,由Server Pilot社区提供。这些人告诉我们可以安装pecl-7.2的新版本以在PHP-7.2上安装mcrypt。不幸的是,尝试执行的命令以pecl7.2-sp: command not found结束,这与网站页面的更新不匹配,因此出现了这个问题。

最后,无论哪种解决方案适合您的操作系统架构级别,都可以尝试。

或者

如果以下方法未能解决根本原因。
或者,您可以选择支持mcrypt扩展的PHP 7.1.X版本


5
你应该考虑从现有应用程序中删除mcrypt使用,而不是在新服务器上安装它。 - Narf
尝试使用pecl而不是pecl7.2-sp。 - Praneeth Nidarshan
https://gist.github.com/arzzen/1209aa4a430bd95db3090a3399e6c35f - theBuzzyCoder
另一种可能性是安装 https://github.com/phpseclib/mcrypt_compat - neubert
6个回答

47
我按照以下步骤使用PECL安装了PHP7.2的mcrypt
  1. 安装PECL

apt-get install php-pecl

  1. 在安装MCRYPT之前,必须先安装libmcrypt

apt-get install libmcrypt-dev libreadline-dev

  1. 使用PECL安装MCRYPT 1.0.1

pecl install mcrypt-1.0.1

  1. 安装成功后

您应该将 "extension=mcrypt.so" 添加到php.ini

如果需要任何帮助,请在下面发表评论。:-)

重要提示!

根据php.net参考,自PHP 7.1.0起,许多(所有)mcrypt函数已被弃用。 不建议依赖此函数。


22
在Debian系统中,第一步应该使用apt-get install php-pear来安装PECL命令。 - Vincent Decaux
5
php-pear也可以在Ubuntu上使用。 - Simon Hayter
如何在安装了源代码的php7.2的Amazon Linux 1上使其工作? - The One
1
@PraneethNidarshan,这个方法不行。因为我按照上述命令安装后,它使用的是php5.3软件包,最终导致我用php 5.3覆盖了我的php7.2。 - The One
@Praneeth Nidarshan,如何在本地XAMPP for Windows 7.3.2中安装Mcrypt扩展? - Kapur
显示剩余4条评论

41

Mcrypt PECL扩展

 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

当你看到提示时

 libmcrypt prefix? [autodetect] :

按 [回车] 键自动检测。

成功通过 pecl 安装 mcrypt 后,您应该将 mcrypt.so 扩展添加到 php.ini 中。

输出结果将会是这样:

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

获取安装路径并将其添加到cli和apache2 php.ini配置中。

sudo bash -c "echo extension=/usr/lib/php/20170718/mcrypt.so > /etc/php/7.2/cli/conf.d/mcrypt.ini"
sudo bash -c "echo extension=/usr/lib/php/20170718/mcrypt.so > /etc/php/7.2/apache2/conf.d/mcrypt.ini"

确认扩展程序已安装

运行命令:

php -i | grep "mcrypt"

输出结果将会像这样:

/etc/php/7.2/cli/conf.d/mcrypt.ini
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value

1
在Windows中使用WAMP怎么样?PHP > 7.0。 - Pragnesh Karia
2
@pragnesh-karia 虽然在 Windows 上安装该库是可能的,但如果您使用 Linux Vagrant 虚拟机,将为您省去很多麻烦。 - Alberto
1
这个答案可以,但我还需要安装 php-dev 包。 - Tuxman
1
@PrafullaKumarSahu,你需要安装php-pear、php-dev和libmcrypt-dev软件包才能运行这些命令。 - Arda
@PragneshKaria,你找到任何解决方案了吗? - Gem
安装 '/usr/lib/php/20170718/mcrypt.so'。我在我的机器上有多个PHP版本。我的当前PHP CLI版本是7.2,但当我安装mcrypt时,它被安装到了PHP 5.6。我该如何将其安装到7.2? - Ejaz

26

@praneeth-nidarshan已经覆盖了大部分步骤,但还有一些:

  • 检查是否安装了pear(或安装):

$ sudo apt-get install php-pear

  • 如未安装,安装php7.2-dev以避免错误:

sh:phpize:未找到

ERROR:`phpize'失败

$ sudo apt-get install php7.2-dev

  • 使用pecl安装mcrypt:

$ sudo pecl install mcrypt-1.0.1

  • 将扩展extension=mcrypt.so添加到php.ini配置文件中;如果您不知道它在哪里,请搜索:

$ sudo php -i | grep 'Configuration File'


7
sudo apt-get install php-pear php7.x-dev

x是您的PHP版本,例如7.2,php7.2-dev

apt-get install libmcrypt-dev libreadline-dev
pecl install mcrypt-1.0.1 

然后在"/etc/php/7.2/apache2/php.ini"中添加"extension=mcrypt.so"。

这里的php.ini取决于您的php安装和apache使用的php版本。


2
作为替代方案,您可以安装7.1版本的mcrypt并创建一个符号链接: 安装php7.1-mcrypt:
sudo apt install php7.1-mcrypt

创建符号链接:

sudo ln -s /etc/php/7.1/mods-available/mcrypt.ini /etc/php/7.2/mods-available

在通过sudo phpenmod mcrypt启用mcrypt后,它就可以使用了。"Original Answer"翻译成"最初的回答"。

经过数小时的研究,我需要的那一部分是最后一段!在我的情况下,它是:sudo phpenmod -v 7.3 mcrypt - cdsaenz

0
sudo apt install php-dev libmcrypt-dev php-pear
sudo pecl channel-update pecl.php.net
sudo pecl install mcrypt-1.0.1

最后,运行以下命令打开PHP配置文件

sudo nano /etc/php/7.2/cli/php.ini 然后在文件中添加以下行,在[PHP]下方保存...

extension=mcrypt.so

对于Apache2

sudo nano /etc/php/7.2/apache2/php.ini

对于Nginx

sudo nano /etc/php/7.2/fpm/php.ini

你可以重新启动 PHP

sudo service php7.2-fpm restart

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