Skip to content
Search Fedora

    Browse this documentation

    Installing PHP on Fedora: php-fpm and wiring it to a web server

    PHP on Fedora comes from the distribution repositories — no third-party repo needed. F45 ships PHP 8.5, and it works right after installing.

    Terminal window
    sudo dnf install php php-fpm php-cli
    PackagePurposeWithout it
    phpmeta package with common extensionsbare CLI only
    php-clicommand-line interpreterno php command
    php-fpmFastCGI process managerCLI only, no web serving

    Measured version on 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

    How many extensions are loaded:

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

    Which configuration file is read — this matters more than anything, because editing the wrong file is the classic mistake:

    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"

    So: main config /etc/php.ini, per-extension files in /etc/php.d/*.ini. CLI picks changes up immediately; php-fpm must be restarted.

    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

    Installing does not start it:

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

    Its pool configuration lives in /etc/php-fpm.d/:

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

    The listen = line in www.conf decides whether it uses a Unix socket or a TCP port — half of all nginx misconfigurations come from this mismatch.

    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

    A probe:

    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 coming back means it works. Delete info.php afterwards.

    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

    With httpd’s mod_php you do not need php-fpm; with nginx you do.

    Terminal window
    sudo dnf search php- | grep -i mysql # find the package name first
    sudo dnf install php-mysqlnd php-gd php-opcache
    sudo systemctl restart php-fpm

    Confirm with php -m. Extensions are separate RPMs, not pecl install — Fedora packages them so upgrades do not wipe them.

    SymptomCause
    browser downloads the .php filenginx lacks location ~ \.php$, or FastCGI is not connected
    502 Bad Gatewayphp-fpm not running, or socket path mismatch
    php.ini change has no effectyou edited it but fpm needs systemctl restart php-fpm
    extension installed but missing from php -minstalled for a different version prefix (e.g. php84-php-*)