keylin麒麟系统安装php7.4

1.清理之前的安装

停止相关进程

pkill -9 php-fpm 2>/dev/null
pkill -9 php 2>/dev/null

删除旧安装

rm -rf /usr/local/php7.4
rm -rf /usr/src/php/php-7.4.33*

删除systemd服务

systemctl stop php7.4-fpm 2>/dev/null
rm -f /etc/systemd/system/php7.4-fpm.service
systemctl daemon-reload

清理环境变量

rm -f /etc/profile.d/php7.4.sh
rm -f /usr/bin/php7.4 2>/dev/null
rm -f /usr/bin/phpize7.4 2>/dev/null
rm -f /usr/bin/php-config7.4 2>/dev/null

2.安装编译依赖

更新系统并安装编译工具

yum update -y
yum groupinstall -y "Development Tools"
yum install -y epel-release

安装PHP编译依赖

yum install -y
gcc gcc-c++ make
libxml2-devel openssl-devel curl-devel
libjpeg-devel libpng-devel freetype-devel
readline-devel
libxslt-devel bzip2-devel
sqlite-devel oniguruma-devel
libzip-devel

3.下载PHP源码

创建源码目录

mkdir -p /usr/src/php
cd /usr/src/php

下载PHP 7.4

wget https://www.php.net/distributions/php-7.4.33.tar.gz
if [ $? -ne 0 ]; then
echo "下载失败,尝试备用链接..."
wget https://downloads.php.net/~derick/php-7.4.33.tar.gz
fi

解压

tar -zxvf php-7.4.33.tar.gz
cd php-7.4.33

4.配置PHP

先检查必要的工具

which gcc
which make

配置PHP编译选项

./configure --prefix=/usr/local/php7.4
--with-config-file-path=/usr/local/php7.4/etc
--enable-fpm
--with-fpm-user=nobody
--with-fpm-group=nobody
--with-mysqli
--with-pdo-mysql
--with-openssl
--with-curl
--with-zlib
--enable-mbstring
--with-gd
--enable-bcmath
--enable-sockets
--with-gettext

5.编译和安装

编译(根据CPU核心数调整,2核心用-j2)

make -j2

检查编译是否成功

if [ $? -eq 0 ]; then
echo "编译成功,开始安装..."
make install
else
echo "编译失败,查看错误信息..."
exit 1
fi

6.验证安装

检查安装的文件

ls -la /usr/local/php7.4/

检查php和php-fpm是否存在

if [ -f /usr/local/php7.4/bin/php ]; then
echo "PHP安装成功!"
/usr/local/php7.4/bin/php -v
else
echo "PHP安装失败"
exit 1
fi
if [ -f /usr/local/php7.4/sbin/php-fpm ]; then
echo "php-fpm安装成功!"
/usr/local/php7.4/sbin/php-fpm -v
else
echo "php-fpm未找到,检查编译..."
find /usr/src/php -name "php-fpm" -type f
fi

7.创建必要的目录和配置文件

创建配置目录

mkdir -p /usr/local/php7.4/etc/php.d
mkdir -p /usr/local/php7.4/var/{log,run}
mkdir -p /usr/local/php7.4/

创建php.ini

if [ -f php.ini-development ]; then
cp php.ini-development /usr/local/php7.4/etc/php.ini
elif [ -f php.ini-production ]; then
cp php.ini-production /usr/local/php7.4/etc/php.ini
else
cat > /usr/local/php7.4/etc/php.ini << 'EOF'
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
EOF
fi

创建php-fpm配置文件

cat > /usr/local/php7.4/etc/php-fpm.conf << 'EOF'
[global]
pid = /usr/local/php7.4/var/run/php-fpm.pid
error_log = /usr/local/php7.4/var/log/php-fpm.log
daemonize = yes
[www]
user = nobody
group = nobody
listen = /tmp/php-fpm.sock
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
EOF

创建www.conf

mkdir -p /usr/local/php7.4/etc/php-fpm.d

cat > /usr/local/php7.4/etc/php-fpm.d/www.conf << 'EOF'
[www]
user = nobody
group = nobody
listen = /tmp/php-fpm.sock
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
EOF

8.创建systemd服务

cat > /etc/systemd/system/php7.4-fpm.service << 'EOF'
[Unit]
Description=PHP 7.4 FastCGI Process Manager
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/php7.4/var/run/php-fpm.pid
ExecStart=/usr/local/php7.4/sbin/php-fpm --daemonize --fpm-config /usr/local/php7.4/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -QUIT $MAINPID
PrivateTmp=true
Restart=on-failure
RestartSec=10
StartLimitInterval=300
StartLimitBurst=5
TimeoutStartSec=60
[Install]
WantedBy=multi-user.target
EOF

重新加载systemd

systemctl daemon-reload

9.设置环境变量和软链接

创建环境变量文件

echo 'export PATH=/usr/local/php7.4/bin:/usr/local/php7.4/sbin:$PATH' > /etc/profile.d/php7.4.sh
chmod +x /etc/profile.d/php7.4.sh
source /etc/profile.d/php7.4.sh

创建软链接

ln -sf /usr/local/php7.4/bin/php /usr/bin/php7.4
ln -sf /usr/local/php7.4/bin/phpize /usr/bin/phpize7.4 2>/dev/null || true
ln -sf /usr/local/php7.4/bin/php-config /usr/bin/php-config7.4 2>/dev/null || true
ln -sf /usr/local/php7.4/bin/php /usr/bin/php 2>/dev/null || true

10.启动

清理可能的旧进程和文件

pkill -9 php-fpm 2>/dev/null
rm -f /tmp/php-fpm.sock
rm -f /usr/local/php7.4/var/run/php-fpm.pid

测试php-fpm配置文件

if [ -f /usr/local/php7.4/sbin/php-fpm ]; then
/usr/local/php7.4/sbin/php-fpm --test
fi

设置开机启动

systemctl enable php7.4-fpm

启动

systemctl start php7.4-fpm

检查状态

systemctl status php7.4-fpm

posted @ 2025-12-10 14:45  运维小白进阶之路  阅读(1)  评论(0)    收藏  举报