CentOS 7上编译安装PHP 8.1及Nginx 配置支持PHP

CentOS 7上编译安装PHP 8.1/及Nginx 配置支持PHP

编译安装 Php【端口:9000】

安装编译环境依赖包

yum -y install gcc gcc-c++ glibc automake autoconf libtool make

创建安装目录

 mkdir -p /usr/local/php8

安装编译 php 依赖库

 yum -y install libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel sqlite-devel libcurl-devel libpng-devel libjpeg-devel freetype-devel libicu-devel oniguruma-devel libxslt-devel

升级cmake

 卸载:yum remove cmake -y
 wget https://cmake.org/files/v3.21/cmake-3.21.0-Linux-x86_64.tar.gz #下载cmake安装包,解压后直接使用[貌似要手动下载到机器了]
 
 解压:tar xzvf cmake-3.21.0-Linux-x86_64.tar.gz -C /usr/local/
 
设置环境变量
[root@xiaoqiang ~]# echo "export CMAKE_HOME=/opt/cmake
export PATH=$CMAKE_HOME/bin:$PATH
" >> /etc/profile.d/cmake.sh
[root@xiaoqiang ~]# source /etc/profile.d/cmake.sh #让环境变量生效

[root@xiaoqiang ~]# cmake -version
cmake version 3.21.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

安装 libzip

下载 libzip
wget https://libzip.org/download/libzip-1.8.0.tar.gz
安装 libzip
[root@xiaoqiang~]# tar -zxvf libzip-1.8.0.tar.gz
[root@xiaoqiang~]# cd libzip-1.8.0
[root@xiaoqiang libzip-1.8.0]# mkdir build
[root@xiaoqiang libzip-1.8.0]# cd build
[root@xiaoqiang build]# cmake ..
[root@xiaoqiang build]#make install

编译安装 Php

下载 Php 源码包
[root@xiaoqiang build]# cd /usr/local/php8
[root@xiaoqiang php]# wget https://www.php.net/distributions/php-8.1.0.tar.gz
配置 Php 编译
[root@xiaoqiang ~]# tar xzvf php-8.1.0.tar.gz -C /usr/local/
[root@xiaoqiang ~]# cd /usr/local/php-8.1.0/
[root@xiaoqiang php-8.1.0 ]# ./configure \
    --prefix=/usr/local/php8 \
    --with-config-file-path=/usr/local/php8 \
    --with-config-file-scan-dir=/usr/local/php8/php.d \
    --enable-mysqlnd \
    --with-mysqli \
    --with-pdo-mysql \
    --enable-fpm \
    --with-fpm-user=nginx \
    --with-fpm-group=nginx \
    --with-gd \
    --with-iconv \
    --with-zlib \
    --enable-xml \
    --enable-shmop \
    --enable-sysvsem \
    --enable-inline-optimization \
    --enable-mbregex \
    --enable-mbstring \
    --enable-ftp \
    --with-openssl \
    --enable-pcntl \
    --enable-sockets \
    --with-xmlrpc \
    --enable-zip \
    --enable-soap \
    --without-pear \
    --with-gettext \
    --enable-session \
    --with-curl \
    --with-jpeg-dir \
    --with-freetype-dir \
    --enable-opcache
编译中 off_t 问题解决
/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径。
    默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不
指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录>。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。
    对于此种情况有2种解决办法:
(1)在用源码安装时,用--prefix指定安装路径为/usr/lib。这样的话也就不用配置PKG_CONFIG_PATH
  (2) 直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib(这个方法给力!)

ldconfig
再来看看ldconfig这个程序,位于/sbin下,它的作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新的搜索路径,需要运>行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。
[root@xiaoqiang php-8.1.0 ]# vim /etc/ld.so.conf 
# 添加如下几行
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64 
# 使配置生效
[root@xiaoqiang php-8.1.0]# ldconfig -v 

在重新执行上面的./configure命令

#需要等待10分钟左右
Php 编译参数说明
--prefix=/usr/local/php7 		# 配置安装目录
--with-config-file-path=/usr/local/php7 # 配置文件 php.ini 的路径
--enable-sockets 				# 开启 socket 
--enable-fpm 					# 启用 fpm 扩展
--enable-cli			 		# 启用 命令行模式 (从 php 4.3.0 之后这个模块默认开启所以可以不用再加此命令)
--enable-mbstring 				# 启用 mbstring 库
--enable-pcntl 					# 启用 pcntl (仅 CLI / CGI)
--enable-soap 					# 启用 soap 
--enable-opcache 				# 开启 opcache 缓存
--disable-fileinfo 				# 禁用 fileinfo (由于 5.3+ 之后已经不再持续维护了,但默认是开启的,所以还是禁止了吧)(1G以下内存服务器直接关了吧)
--disable-rpath  				# 禁用在搜索路径中传递其他运行库。
--with-mysqli 					# 启用 mysqli 扩展
--with-pdo-mysql 				# 启用 pdo 扩展
--with-iconv-dir 				# 启用 XMLRPC-EPI 字符编码转换 扩展
--with-openssl 					# 启用 openssl 扩展 (需要 openssl openssl-devel)
--with-fpm-user=nginx 			# 设定 fpm 所属的用户 
--with-fpm-group=nginx 			# 设定 fpm 所属的组别
--with-curl 					# 启用 curl 扩展
--with-mhash 					# 开启 mhash 基于离散数学原理的不可逆向的php加密方式扩展库
# GD
--with-gd 						# 启用 GD 图片操作 扩展
--with-jpeg-dir 				# 开启对 jpeg 图片的支持 (需要 libjpeg)
--with-png-dir 					# 开启对 png 图片支持 (需要 libpng)
--with-freetype-dir 			# 开启 freetype 
# 压缩
--enable-zip 					# 启用 zip
--with-zlib 					# 启用对 zlib 支持 
# xml
--enable-simplexml 				# 启用对 simplexml 支持
--with-libxml-dir 				# 启用对 libxml2 支持

--enable-debug 					# 开启 debug 模式
编译安装 Php
make -j 2 && make install 
#采用两个核心编译
创建 Php.ini 配置文件
[root@xiaoqiang php-8.1.0]# cp php.ini-production /usr/local/php8/etc/php.ini

[root@xiaoqiang php-8.1.0]# vim /usr/local/php8/etc/php.ini +1371 #php的Session存储目录
1371 session.save_path = "/tmp" #将注释打开
设置php-fpm配置文件
[root@xiaoqiang php-8.1.0]# cd /usr/local/php8/etc
[root@xiaoqiang etc]# cp php-fpm.conf.default php-fpm.conf
[root@xiaoqiang etc]# vim php-fpm.conf +17
pid = /var/run/php-fpm.pid  #将注释取消并修改

# php-fpm参数优化
[root@xiaoqiang etc]# cd /usr/local/php8/etc/php-fpm.d/
[root@xiaoqiang php-fpm.d]# cp www.conf.default www.conf
[root@xiaoqiang php-fpm.d]# vim www.conf
#sed -i '/^;.*/d;/^$/d'  www.conf# 删除文件中;的注释和空格
#sed -i '/#.*/d' www.conf # 删除文件中的 #注释
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000 #php本机不用改,分开则加
;listen.allowed_clients=nginx Ip地址 #nginx和php同一个机器不用加
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
php-fpm 进程池配置
  • 下面4个参数的意思分别为:
    • pm.max_children:动态方式下他限定php-fpm的最大进程数(这里要注意pm.max_spare_servers的值只能小于等 pm.max_children)
    • pm.start_servers:动态方式下的起始php-fpm进程数量。
    • pm.min_spare_servers:动态方式空闲状态下的最小php-fpm进程数量。
    • pm.max_spare_servers:动态方式空闲状态下的最大php-fpm进程数量。
启动 php-fpm
[root@xiaoqiang php-fpm.d]# /usr/local/php8/sbin/php-fpm
10、检查 php-fpm 是否成功启动
[root@xiaoqiang php-fpm.d]# ps aux | grep php-fpm

若看到相关进程,则证明启动成功。查询进程时,进程是以 nginx 用户身份执行的

配置 php-fpm 系统环境变量
[root@xiaoqiang php-fpm.d]# cd
[root@xiaoqiang ~]# vim /etc/profile.d/php.sh
export PHP_HOME=/usr/local/php8
export PATH=$PATH:$PHP_HOME/bin:$PHP_HOME/sbin
重载环境变量
[root@xiaoqiang ~]# source /etc/profile.d/php.sh
  • 使用 echo $PATH 命令查看环境变量中是否已经加入了相关的路径
配置 php-fpm 开机自启动
[root@xiaoqiang ~]# vim /lib/systemd/system/php-fpm.service
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php8/sbin/php-fpm
ExecStop=/bin/pkill -9 php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target
php-fpm.service 文件说明
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
重载 systemctl 配置
 systemctl daemon-reload
停止 php-fpm
pkill php-fpm
用 systemctl 启动 php-fpm
systemctl start php-fpm.service
设置 php-fpm 开机启动
 systemctl enable php-fpm.service
php-fpm 管理命令
systemctl stop php-fpm.service 			# 停止服务
systemctl restart php-fpm.service 		# 重新启动服务
systemctl status php-fpm.service		# 查看服务当前状态
systemctl disable php-fpm.service 		# 停止开机自启动

Nginx 配置支持PHP

添加 Nginx 配置

[root@xiaoqiang~]# cd /etc/nginx/
[root@xiaoqiang nginx]# vim nginx.conf
sed -i '/^#.*/d;/^$/d' /etc/nginx/nginx.conf # 删除文件中的注释
sed -i '/#.*/d' /etc/nginx/nginx.conf # 删除文件中的 注释
#配置如下
server
{
	listen 80;
	server_name localhost;
	index index.html index.htm index.php;
	root /usr/local/nginx/html;
	location ~ \.php$
	{
		include fastcgi_params;        #指定nginx连接php-fpm的常量
		fastcgi_pass 127.0.0.1:9000;    #连接php-fpm的地址和端口
		fastcgi_index index.php;        #指定默认页面
		fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #指定站点根目录
	}
}

添加 php 探测文件

[root@xiaoqiang nginx]# cd /usr/local/nginx/html/
[root@xiaoqiang html]# vim index.php
<?php
phpinfo();
?>

验证 Nginx 关联 php-fpm

重启 php-fpm
[root@xiaoqiang html]# systemctl restart php-fpm.service
[root@xiaoqiang ~]# ps -ef|grep php-fpm
root      69652      1  0 14:02 ?        00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
nginx     69653  69652  0 14:02 ?        00:00:00 php-fpm: pool www
nginx     69654  69652  0 14:02 ?        00:00:00 php-fpm: pool www
nginx     69655  69652  0 14:02 ?        00:00:00 php-fpm: pool www
nginx     69656  69652  0 14:02 ?        00:00:00 php-fpm: pool www
nginx     69657  69652  0 14:02 ?        00:00:00 php-fpm: pool www
重载 Nginx 配置
[root@xiaoqiang html]# systemctl reload nginx
[root@xiaoqiang html]# systemctl status nginx

[root@xiaoqiang html]# /usr/sbin/nginx -s reload
访问验证
http://192.168.60.25/index.php

在这里插入图片描述

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BLXXQQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值