在麒麟系统安装php7.4中遇到的问题
一、安装过程
下载相关php安装包,进行解压,进入安装包,进行编译安装,编译
./configure
--prefix=/soft/php74
--with-config-file-path=/soft/php74/etc
--with-libdir=/usr/lib64
--with-freetype=/usr/include/freetype2/freetype/
--with-jpeg=/usr/lib64
--disable-rpath
--with-curl
--enable-gd
--with-gettext
--with-mysqli
--with-openssl
--with-openssl-dir
--with-iconv
--with-zip
--with-pdo-mysql
--with-pdo-sqlite
--with-xsl
--with-zlib
--with-bz2
--with-mhash
--enable-fpm
--enable-pdo
--enable-session
--enable-simplexml
--enable-bcmath
--enable-mbregex
--enable-mbstring
--enable-opcache
--enable-pcntl
--enable-shmop
--enable-soap
--enable-sockets
--enable-sysvmsg
--enable-sysvsem
--enable-sysvshm
--enable-mysqlnd
--enable-xml
--enable-phar
如果没有报错就进行编译安装
make && make install
在进行make的时候报错如下:make: *** [ext/phar/phar.php]
解决方法如下:make ZEND_EXTRA_LIBS='-liconv'
二、问题排查
安装的过程中基本没出现什么问题,主要问题出现在php启动的时候,本次的环境是进行php版本升级,由7.2升级到7.4,安装成功后查看phpinfo信息总是显示php版本为7.2,无法切换到新安装的版本。通过分析发现,nginx是通过fastcgi进程管理器与php进行通信,php-fpm为进程管理器的一种,所以初步判断是nginx无法正常与php通信造成的,中间的主要遇到的问题如下:
1、手动启动php-fpm,访问系统提示502,查看日志报错如下:
主要报错原因为nginx和php-fpm的配置sock方式不同,原有的nginx配置方式为为通过文件进行访问,内容如下
而新的php-fpm的访问方式为通过监听端口的方式(可通过查看配置文件,配置文件路径为php7_4/etc/php-fpm.d/www.conf),具体内容如下
解决方法:
修改enable-php.conf 文件,修改内容如下:
location ~ [^/].php(/|$)
{
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
在nginx中引用该配置文件(nginx配置文件如下:/usr/local/nginx/conf/nginx.conf),内容如下:
2、修改后报错如下:
提示被拒绝,错误信息如下:
通过排查发现少修改了vhost下的enable-php,修改后即可成功
备注:
手动启动php-fpm:php-fpm -c /usr/local/php7_4/lib/php.ini -y /usr/local/php7_4/etc/php-fpm.conf
当存在多版本php时,通过软连接进行版本切换:ln -sf /usr/local/php7_4/bin/php /usr/bin/php
断开所有php-fpm进程连接:pkill -9 php-fpm
重启php-fpm:
systemctl stop php-fpm
systemctl start php-fpm