centos7编译安装PHP 7.4

2021-06-17 共2385人围观

我安装的是PHP 7.4.20,如果需要其他版本的,可以前往PHP官网下载

下载PHP安装包

cd /usr/local/src
wget https://www.php.net/distributions/php-7.4.20.tar.gz
安装编译所需的常用组件和依赖包
yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libmcrypt mcrypt mhash sqlite-devel autoconf automake libtool libicu-devel openldap openldap-devel
创建php用户组和用户,用来运行php, -g指定用户组, -r创建系统用户
groupadd php
useradd -r -g php -s /bin/false -M php
解压php包
tar zxvf php-7.4.20.tar.gz
cd php-7.4.20

执行

./buildconf

说明包已经是发布版本,不需要再编译配置文件

生成Makefile文件
./configure \
--prefix=/usr/local/php \
--exec-prefix=/usr/local/php \
--bindir=/usr/local/php/bin \
--sbindir=/usr/local/php/sbin \
--includedir=/usr/local/php/include \
--libdir=/usr/local/php/lib/php \
--mandir=/usr/local/php/php/man \
--with-config-file-path=/usr/local/php/etc \
--with-mysql-sock=/var/run/mysql/mysql.sock \
--with-mhash \
--with-openssl \
--with-mysqli=shared,mysqlnd \
--with-pdo-mysql=shared,mysqlnd \
--with-iconv \
--with-zlib \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--enable-opcache \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--without-gdbm

报错

执行

cp -frp /usr/lib64/libldap* /usr/lib/

再次报错

该错误是没有安装oniguruma包,oniguruma是一个处理正则表达式的库,安装oniguruma和oniguruma-devel

centos7 安装

yum -y install http://mirror.centos.org/centos-7/7.7.1908/cloud/x86_64/openstack-queens/oniguruma-6.7.0-1.el7.x86_64.rpm
yum -y install http://mirror.centos.org/centos-7/7.7.1908/cloud/x86_64/openstack-queens/oniguruma-devel-6.7.0-1.el7.x86_64.rpm

备用地址

oniguruma:http://down.24kplus.com/linux/oniguruma/oniguruma-6.7.0-1.el7.x86_64.rpm
oniguruma-devel:http://down.24kplus.com/linux/oniguruma/oniguruma-devel-6.7.0-1.el7.x86_64.rpm

 CentOS 8 安装

yum config-manager --set-enabled PowerTools
yum -y install oniguruma oniguruma-devel

继续执行,又报libzip的错误

因为对libzip的版本有要求,所以肯定不能用yum方式安装,只能编译安装

cd /usr/local/src
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
./configure && make && make install

安装完成后,查看安装路径

whereis libzip

现在需要告诉. ./configure 程序,你新安装的libzip在哪里,方法有两个

1.编辑 /etc/ld.so.conf这个文件,最后面添加以下内容

`/usr/local/lib`

接着执行下面的命令立即生效

ldconfig -f

2.加入系统环境变量(推荐

export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/" 

这是临时的,重启后要重新添加一遍

注:从libzip1.4.0版本以上需要cmake编译安装(非必须情况下,不推荐,可以忽略)
 

继续 configure 

完成后进行编译和安装

make clean
make && make install

编译完成

将 php 添加到环境变量,新建/etc/profile.d/php7.sh文件,在php7.sh文件中添加export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH
vim /etc/profile.d/php7.sh
export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH
source /etc/profile.d/php7.sh
查看PHP版本

配置php.ini文件,从php源码拷贝php.ini-production/usr/local/php/etc/目录,编译php.ini文件,一般只需要设置扩展目录及相应的扩展和时区即可
cp /usr/local/src/php-7.4.20/php.ini-production /usr/local/php/etc/php.ini
vim /usr/local/php/etc/php.ini
...
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303"
zend_extension=opcache.so
extension=mysqli.so
extension=pdo_mysql.so
...
date.timezone = PRC
...
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
...
设置php-fpm.conf文件,此文件是php-fpm运行配置文件,先将php-fpm脚本文件拷贝到/ect/init.d/目录并给出执行权限,并添加到开机自动启动,编译php-fpm.conf,设置好扩展配置文件的路径和错误日志保存路径
cp /usr/local/src/php-7.4.20/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
...
error_log = /var/log/php-fpm/error.log
....
设置www.conf文件,此文件是php-fpm运行的扩展配置文件
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
vim php-fpm.d/www.conf
...
user = nginx
group = nginx
...
listen = /var/run/php-fpm/php-fpm.sock
...
slowlog = /var/log/php-fpm/$pool.log.slow
; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_slowlog_timeout = 1m
...
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
...

注意:
此配置文件参考于网络,listen= /var/run/php-fpm/php-fpm.sock是根据个人喜爱来设定的,你也可以配置成listen = 127.0.0.1:9000,只不过到时候nginx.conf配置文件里面的fastcgi_pass指定的监听方式不同

设置php-fpm运行目录及相关目录和权限
mkdir -p /var/log/php-fpm /var/run/php-fpm
chown nginx:nginx -R /var/run/php-fpm/

注意:
由于之前我们在www.conf中使用的的usergroup来运行php-fpm的,所以/var/run/php-fpm运行时的目录一定要把拥有者改变为相应的用户和组,即nginx用户和nginx组,否则启动php-fpm时会报错。

在 /etc/init.d/php-fpm中添加如下代码,让php-fpm运行目录自动创建并修改权限
vim /etc/init.d/php-fpm
...
php_fpm_log="/var/log/php-fpm"
php_fpm_run="/var/run/php-fpm"
if [ ! -d $php_fpm_log ];then
mkdir -p $php_fpm_log
chown -R nginx.nginx $php_fpm_run
fi
if [ ! -d $php_fpm_run ];then
mkdir -p $php_fpm_run
chown -R nginx.nginx $php_fpm_run
fi
chown -R nginx:nginx /var/run/php-fpm/
...
设置session的存储目录
mkdir -p /var/lib/php/session && chown nginx.nginx -R !$
检测php-fpm配置
php-fpm -t

如果有下面的错误,只需要去安装对应的扩展即可

之前下载的PHP包附带着大部分扩展库,具体可以查看地址/usr/local/src/php-7.4.20/ext

扩展补完后,启动PHP-FPM

service php-fpm start