CentOS 7 通过 yum 安装 PHP 7.4

PHP 7.4 可以设置好 remi repo 库之后直接用 yum 安装, 没有特殊需求不需要使用编译安装

安装必要程序包

首先, 安装 epel-releaseyum-utils, 然后安装 Remi 仓库

yum install epel-release yum-utils
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

CentOS 8

dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

启用 Remi 仓库

启用 remi-php74 仓库并更新系统

yum-config-manager --enable remi-php74
yum update

CentOS 8

Error: 
 Problem: cannot install the best candidate for the job
  - nothing provides libedit-devel(x86-64) needed by php72-php-devel-7.2.33-1.el8.remi.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

对于 CentOS 8, 可能会遇到问题, 解决方法是启用 PowerTools 仓库

dnf config-manager --set-enabled PowerTools

You need to enable the PowerTools repository (equiv. of upstream CodeReady Linux Builder channel) which provide most of the developer stuff.

你需要启用 PowerTools 存储库 (相当于上游 CodeReady Linux Builder 频道), 它提供大多数开发人员的内容

搜索可安装的 PHP 7.4 扩展

你可以使用以下命令来查看可用的 PHP 7.4 扩展

yum search php74 | more
yum search php74 | egrep 'fpm|gd|mysql|memcache'


php74-php-fpm.x86_64 : PHP FastCGI Process Manager
php74-php-gd.x86_64 : A module for PHP applications for using the gd graphics
php74-php-mysqlnd.x86_64 : A module for PHP applications that use MySQL
php74-php-pecl-mysql.x86_64 : MySQL database access functions
php74-php-pecl-mysql-xdevapi.x86_64 : MySQL database access functions

安装 PHP 7.4 和相关扩展

根据需要安装 PHP 7.4 和相关扩展

yum install php74 php74-php-devel php74-php-fpm php74-php-gd php74-php-json php74-php-mbstring php74-php-mysqlnd php74-php-xml php74-php-xmlrpc php74-php-opcache php74-php-mcrypt

检查 PHP 版本和模块

你可以通过以下命令检查安装的 PHP 版本及其模块

php74 --version
php74 --modules

配置 Nginx 以支持 PHP

  1. 检查 php-fpm 服务的启动参数
  2. 检查 nginx 的用户组
  3. 创建 php-fpm.sock 目录
# 检查服务启动参数
cat /usr/lib/systemd/system/php74-php-fpm.service
cat /etc/systemd/system/multi-user.target.wants/php74-php-fpm.service

# 检查 nginx 用户组
egrep '^(user|group)' /etc/nginx/nginx.conf

# 创建 sock 目录 (临时)
mkdir -p /var/run/php-fpm/

# 创建 sock 目录 (永久)
vim /usr/lib/systemd/system/php74-php-fpm.service
ExecStartPre=/bin/mkdir -p /var/run/php-fpm/

## 创建 sock 目录 (永久), 当 php74-php-fpm 更新后仍然生效
systemctl edit php74-php-fpm

[Service]
ExecStartPre=/bin/mkdir -p /var/run/php-fpm/

修改 php-fpm 配置

编辑 vim /etc/opt/remi/php74/php-fpm.d/www.conf 文件

user = nginx
group = nginx

listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nginx
listen.group = nginx

修改 Session 文件夹所有权

将 PHP 的 session 文件夹的所有权更改为 nginx 用户和组

chown -R nginx:nginx /var/opt/remi/php74/lib/php

修改 Nginx 配置文件

编辑 /etc/nginx/nginx.conf 文件

server {
    .... # 其他配置参数

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

启动 PHP-FPM 和 Nginx 服务

启用并重启 php-fpmnginx 服务

systemctl enable php74-php-fpm
systemctl restart php74-php-fpm
systemctl restart nginx

测试 PHP 配置

在你的 Web 根目录下创建一个 phpinfo.php 文件以测试 PHP 是否正常工作

<?php
  // test script for CentOS/RHEL 7+PHP 7.4+Nginx 
  phpinfo();
?>

配置 Xdebug 进行远程调试

服务器主动与客户端通信, 远程调试客户端需要开放设置的端口

  1. 把 phpinfo 页面完整复制到 Xdebug Wizard 生成安装步骤

  2. phpize, php-config 找不到时可以使用搜索命令

    # find / -name "phpize"
    /opt/remi/php74/root/usr/bin/phpize
    
    # find / -name "php-config"
    ./configure --with-php-config=/opt/remi/php74/root/usr/bin/php-config
    
  3. 编辑 /etc/opt/remi/php74/php.ini 文件, 添加 Xdebug 配置

    zend_extension = /opt/remi/php74/root/usr/lib64/php/modules/xdebug.so
    [xdebug]
    xdebug.auto_trace = true
    xdebug.remote_enable = true
    xdebug.remote_autostart = true
    xdebug.remote_connect_back = true
    xdebug.remote_port = 4000
    xdebug.collect_vars = On
    xdebug.collect_return = On
    xdebug.collect_params = On
    xdebug.show_local_vars = On
    xdebug.default_enable = On
    xdebug.max_nesting_level = 10000
    

配置 VSCode 进行调试

在 VSCode 中创建如下调试配置

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 4000,
            "pathMappings": {
                "/usr/share/nginx/html": "${workspaceRoot}",
            },
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

安装 Chrome 插件

安装 Xdebug Helper 插件以便于调试

一键安装

在 server_init 中 安装 PHP 8.2.sh

yum install -y epel-release yum-utils
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install -y php82 php82-php-devel php82-php-fpm php82-php-gd php82-php-json php82-php-mbstring php82-php-mysqlnd php82-php-xml php82-php-xmlrpc php82-php-opcache php82-php-mcrypt php82-php-sodium php82-php-pgsql GraphicsMagick
sed -i '11a\ExecStartPre=/bin/mkdir -p /var/run/php-fpm/' /usr/lib/systemd/system/php82-php-fpm.service
export PHP_WWW="/etc/opt/remi/php82/php-fpm.d/www.conf"
sed -i 's/user =.*/user = nginx/g' $PHP_WWW
sed -i 's/group =.*/group = nginx/g' $PHP_WWW
sed -i 's/listen =.*/listen = \/var\/run\/php-fpm\/php-fpm.sock/g' $PHP_WWW
sed -i 's/;listen.owner =.*/listen.owner = nginx/g' $PHP_WWW
sed -i 's/;listen.group =.*/listen.group = nginx/g' $PHP_WWW
export PHP_INI="/etc/opt/remi/php82/php.ini"
sed -i -e "s|expose_php = On|expose_php = Off|" $PHP_INI
sed -i -e "s|short_open_tag = Off|short_open_tag = On|" $PHP_INI
chown -R nginx:nginx /var/opt/remi/php82/lib/php
systemctl enable php82-php-fpm
systemctl restart php82-php-fpm

原文

unable to install php-devel on CentOS 8
How to install PHP 7.2 on CentOS 7/RHEL 7
Cento7にphp-fpmをインストールし、nginxと連携する

最后更新于 2022-01-31
使用 Hugo 构建
主题 StackJimmy 设计