跳转到内容
搜索 Fedora 文档

    浏览当前文档目录

    在 Fedora 上安装 PHP:php-fpm 与 Web 服务器对接

    Fedora 上的 PHP 来自发行版仓库,不需要加第三方源。F45 里是 PHP 8.5,装完就能用。

    Terminal window
    sudo dnf install php php-fpm php-cli
    包作用不装会怎样
    php元包,带上常用扩展只有裸 CLI
    php-cli命令行解释器php 命令不存在
    php-fpmFastCGI 进程管理器只能跑 CLI,不能给 Web 用

    F45 实测版本:

    php-8.5.12-1.fc45.x86_64
    Terminal window
    php -v
    PHP 8.5.12 (cli) (built: Oct 19 2026 17:02:46) (NTS gcc x86_64)
    Copyright (c) The PHP Group

    看装了多少扩展:

    Terminal window
    php -m | grep -cE "^[a-z]"
    35

    配置文件读的是哪个——这条比什么都重要,很多人改错文件:

    Terminal window
    php --ini
    Configuration File (php.ini) Path: "/etc"
    Loaded Configuration File: "/etc/php.ini"
    Scan for additional .ini files in: "/etc/php.d"

    所以:主配置 /etc/php.ini,扩展的开关放 /etc/php.d/*.ini。改完 CLI 立即生效,php-fpm 要重启。

    Terminal window
    php-fpm -v
    systemctl is-enabled php-fpm
    PHP 8.5.12 (fpm-fcgi) (built: Oct 19 2026 17:02:46) (NTS gcc x86_64)
    disabled

    装完不等于启动。要手动开:

    Terminal window
    sudo systemctl enable --now php-fpm
    systemctl status php-fpm --no-pager

    它的池配置在 /etc/php-fpm.d/:

    Terminal window
    ls /etc/php-fpm.d/
    www.conf

    www.conf 里的 listen = 决定它听 Unix socket 还是 TCP 端口——nginx 配错一半的锅都在这里。

    Terminal window
    sudo dnf install nginx
    sudo tee /etc/nginx/conf.d/php.conf >/dev/null <<'EOF'
    server {
    listen 80;
    server_name _;
    root /usr/share/nginx/html;
    index index.php index.html;
    location ~ \.php$ {
    fastcgi_pass unix:/run/php-fpm/www.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    }
    EOF
    sudo systemctl enable --now nginx php-fpm

    写个探针:

    Terminal window
    echo '<?php phpinfo();' | sudo tee /usr/share/nginx/html/info.php
    curl -s http://127.0.0.1/info.php | head -5

    能出 HTML 就通了。看完记得删掉 info.php。

    Terminal window
    sudo dnf install httpd php
    sudo systemctl enable --now httpd
    echo '<?php echo PHP_VERSION;' | sudo tee /var/www/html/v.php
    curl -s http://127.0.0.1/v.php

    httpd 走 mod_php 时不需要 php-fpm;nginx 则必须有 php-fpm。

    Terminal window
    sudo dnf search php- | grep -i mysql # 先找包名
    sudo dnf install php-mysqlnd php-gd php-opcache
    sudo systemctl restart php-fpm

    装完用 php -m 确认模块出现。扩展是独立 RPM,不是 pecl install——Fedora 用发行版打包的方式,升级时才不会被覆盖丢。

    Fedora 自己只给一个 PHP(8.5.12),要多版本靠 Remi 的 module stream,不是另装一个包名。

    先装 Remi 的 release 包:

    Terminal window
    sudo dnf install -y https://rpms.remirepo.net/fedora/remi-release-45.rpm

    它落的仓库文件是 remi-cn.repo(阿里云镜像),且默认 disabled:

    [remi-cn]
    baseurl=https://mirrors.aliyun.com/remi/fedora/45/remi/x86_64/
    enabled=0

    看有哪些版本可选:

    Terminal window
    dnf module list php --enablerepo=remi-cn
    Name Stream Profiles Summary
    php remi-8.2 common [d], devel, minimal PHP scripting language
    php remi-8.3 common [d], devel, minimal PHP scripting language
    php remi-8.4 common [d], devel, minimal PHP scripting language
    php remi-8.5 common [d], devel, minimal PHP scripting language
    php remi-8.6 common [d], devel, minimal PHP scripting language

    五个版本(8.2 / 8.3 / 8.4 / 8.5 / 8.6)都是流,不是并行包。 同一时间只能启用一个。

    Terminal window
    sudo dnf module enable -y php:remi-8.4 --enablerepo=remi-cn

    启用后仓库里可用的 php 变成:

    8.4.27-1.module_php.8.4.fc45.remi

    再同步系统已装的 php:

    Terminal window
    sudo dnf distro-sync --enablerepo=remi-cn

    实测这次同步会把系统的 php 8.5.12 换成 8.4.27,来源从 fedora 变成 remi-modular:

    php x86_64 0:8.4.27-1.module_php.8.4.fc45.remi remi-modular 5.3 MiB
    replacing php x86_64 0:8.5.12-1.fc45 fedora
    php-cli x86_64 0:8.4.27-1.module_php.8.4.fc45.remi remi-modular 10.6 MiB
    replacing php-cli x86_64 0:8.5.12-1.fc45 fedora

    回退:

    Terminal window
    sudo dnf module reset -y php
    sudo dnf distro-sync
    现象原因
    浏览器下载了 php 文件nginx 没配 location ~ \.php$,或 fastcgi 没通
    502 Bad Gatewayphp-fpm 没启动,或 socket 路径不一致
    改了 php.ini 无效改的是 CLI 的,fpm 需要 systemctl restart php-fpm
    扩展装了但 php -m 没有装的是别的版本前缀(如 php84-php-*)