PHP8安装(centos7环境)

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

Linux下安装PHP8环境

安装编译环境

安装编译环境依赖包

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

安装编译 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

下载PHP包

wget https://www.php.net/distributions/php-8.1.9.tar.gz
tar -xzxvf php-8.1.9.tar.gz

配置PHP环境

./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

编译安装 php

采用两个核心编译

make -j 2 && make install 

PHP配置文件编辑

php.ini

创建php.ini配置文件

cp php.ini-production /usr/local/php8/etc/php.ini

修改php.ini配置文件

vim /usr/local/php8/etc/php.ini
session.save_path = "/tmp" #将注释打开

php-fpm

设置php-fpm配置文件

cd /usr/local/php8/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf

将注释取消并修改

pid = /var/run/php-fpm.pid

php-fpm参数优化

cd /usr/local/php8/etc/php-fpm.d/
cp www.conf.default 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执行用户

创建nginx用户
增加nginx用户,并修改nginx服务的默认用户

useradd nginx -s /sbin/nologin -M

php-fpm相关命令

php-fpm 启动与检查

启动php-fpm

/usr/local/php8/sbin/php-fpm

检查 php-fpm 是否成功启动

ps aux | grep php-fpm

php-fpm 环境变量配置

配置 php-fpm 系统环境变量

vim /etc/profile.d/php.sh
export PHP_HOME=/usr/local/php8
export PATH=$PATH:$PHP_HOME/bin:$PHP_HOME/sbin
source /etc/profile.d/php.sh

php-fpm 开机自启动

配置 php-fpm 开机自启动

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
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一招配置,帮你快速隐藏php后缀名

配置文件

server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;

location / {
try_files $uri $uri/ $uri.php$is_args$args;
}

location ~ \.php$
{

if ($request_uri ~ ^/([^?]*)\.php($|\?)) {
return 302 /$1$is_args$args;
}

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; #指定站点根目录
}
}

验证文件

cd /usr/local/nginx/html/
vim index.php
<?php
phpinfo();
?>

重启php-frm

systemctl restart php-fpm.service

重载nginx

systemctl reload nginx

/usr/local/nginx/sbin/./nginx -t

访问验证

http://127.0.0.1:80/index.php

问题记录

环境依赖问题

oniguruma依赖不存在

解决 yum install oniguruma oniguruma-devel 安装不生效问题

Centos 7 安装 oniguruma oniguruma-devel

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

libzip依赖不存在

报错:Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met

libzip 1.2.0

wget https://libzip.org/download/libzip-1.2.0.tar.gz
tar zxvf libzip-1.2.0.tar.gz
./configure
make && make install
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"

libxml-2.0 >= 2.7.6

系统环境:Rocky Linux release 9.3 (Blue Onyx)

执行命令./configure –prefi…时报configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not me

yum install libxml2-devel

openssl >= 1.0.2

系统环境:Rocky Linux release 9.3 (Blue Onyx)

Rocky Linux 安装 OpenSSL 1.1.1 - 部分参考

Installing OpenSSL 3.x on Rocky/Alma/CentOS/RHEL 8 - 部分参考

更新

sudo dnf update -y

安装

sudo dnf install -y make gcc perl-core pcre-devel wget zlib-devel

下载openSSL

wget https://ftp.openssl.org/source/openssl-1.1.1u.tar.gz

配置

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl

安装

make -j $(nproc) && make install

读取配置

sudo ldconfig

添加环境变量

sudo tee /etc/profile.d/openssl.sh<<EOF
export PATH=/usr/local/openssl/bin:\$PATH
export LD_LIBRARY_PATH=/usr/local/openssl/lib:/usr/local/openssl/lib64:\$LD_LIBRARY_PATH
EOF

刷新环境变量

source /etc/profile.d/openssl.sh

执行命令./configure –prefi…时报Package ‘openssl‘, required by ‘virtual:world‘, not found

yum install openssl-devel -y

sqlite3 >= 3.7.7

系统环境:Rocky Linux release 9.3 (Blue Onyx)

configure: error: Package requirements (sqlite3 >= 3.7.7) were not met:
Package ‘sqlite3’, required by ‘virtual:world’, not found

configure: error: Package requirements (sqlite3 」 3.7.4) were not met:

yum -y install sqlite-devel

libcurl

系统环境:Rocky Linux release 9.3 (Blue Onyx)

执行命令./configure –prefi…时报Package ‘libcurl‘, required by ‘virtual:world‘, not found

yum install libcurl-devel -y 

oniguruma

系统环境:Rocky Linux release 9.3 (Blue Onyx)

Package ‘oniguruma’, required by ‘virtual:world’, not found

oniguruma-6.9.6

oniguruma-devel-6.9.6

yum install -y https://dl.rockylinux.org/pub/rocky/9/AppStream/x86_64/os/Packages/o/oniguruma-6.9.6-1.el9.5.x86_64.rpm
yum install -y https://dl.rockylinux.org/pub/rocky/9/devel/x86_64/os/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm

nginx启动报错

解决nginx启动报错nginx: [emerg] open() “/var/run/nginx/nginx.pid“ failed (2: No such file or directory)

采取方法一

接口错误响应

PHP出现“headers already sent”原因及解决方案

错入日志:
Warning: Cannot modify header information - headers already sent by ***

检查是否使用windows下的notepad编辑修改了php文件,php不支持UTF8编码文件的BOM头,当php文件头部出现BOM时候会导致内容被发送。