Ubuntu安装LNMP,遇到php7.*无法安装及安装扩展mcrypt相关


1.Ubuntu14.04(32bit)无法安装php7各个版本

  • 一开始在选择阿里云服务器配置的时候,因为是试用免费期,只有Ubuntu14.04(32bit)提供,所以直接就装上了。之后,配置LNMP环境,Nginx - MYSQL都顺利安装上,到了php7.2的安装却卡壳了,一直报错未找到可供安装的php包,报错:E: Unable to locate package php7.2 ; E: Couldn't find any package by regex 'php7.2'。然后接着试了php7.1、php7.3都不行,从网上查找原因,有说是【PHP不在Ubuntu的软件库中,所以要使用第三方的 PPA ppa:ondrej/php 库】,好,通过给出的方法执行sudo add-apt-repository ppa:ondrej/php ; sudo apt-get update ; apt-cache search php7.2 ; sudo apt-get install -y php7.2,整了半天还是不行,也是同样的报错。到此,放弃,Plan B,尝试升级系统版本。
  • 根据步骤将Ubuntu升级到了18.04(64bit)。Nginx安装,一切顺利,显示 Welcome to nginx!。 MYSQL安装,一切顺利。PHP7.2安装,一切顺利,安装命令滚动的画面和百分比进度条跳动的画面看着无比安逸啊~~~~

2. Ubuntu18.04(64bit)无法安装扩展PHP7.2-mcrypt

  • 由于mcrypt扩展开发的结束,扩展也从PHP 7.2中删除,并转移到一个非官方的PECL存储库中。但是,你仍然可以在PHP 5.4到PHP 7.1中找到mcrypt扩展。PHP 7.2已经发布,但是它不包含mcrypt扩展。对于PHP 7.2+, PHP使用libsodium作为加密库。
  • 要在PHP 7.2上安装mcrypt扩展,需要自行编译mcrypt扩展或者采用PCEL安装。
    我们采用PCEL安装。

① 安装Mcrypt PECL extenstion

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] :  直接回车,自动检测
# 安装成功后,会输出如下信息
...
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

② 根据上面成功安装的提示,我们应该将 extension=mcrypt.so 添加到php.ini中。
③ 重启PHP服务,/etc/init.d/php7.2-fpm restart
④ 验证扩展是否已安装

php -i | grep "mcrypt"

#输出如下内容,OK

/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

过程常见问题

@提示pecl不可用,或是,需要pear

sudo apt-get install php-pear

@提示 sh: phpize: not found ; ERROR: ‘phpize’ failed

sudo apt-get install php7.2-dev

@提示 PHP Warning: Module 'mcrypt' already loaded in Unknown on line 0

方案:Your php.ini contains two or more of these lines: extension=mcrypt.so ,Remove all except one.
extension=mcrypt.so配置项可能存在在除了php.ini以外的其他配置文件,注释或删除掉其他的,只保留php.ini中的此项。

php -i | grep .ini\$ 命令查看php的所有 ini 配置文件)

(解决案例:I deleted the line extension=mcrypt.so in /etc/php5/mods-available/mcrypt.ini and the error is disappeared now)


微信扫码关注公众号-刘小七的技术站,不定期更新编程的奇淫巧计 ~

您的每一份打赏,都是对刘小七原创的支持 ~ 笔芯

声明:ITLXQ|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Ubuntu安装LNMP,遇到php7.*无法安装及安装扩展mcrypt相关


与人为善,比聪明更重要。