Linux 下 PHP 安装完全指南:从入门到精通
PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,特别适用于 Web 开发并可嵌入 HTML 中。由于其跨平台性、易用性和丰富的生态系统,PHP 成为 LAMP(Linux + Apache + MySQL + PHP)、LEMP(Linux + Nginx + MySQL + PHP)等经典 Web 架构的核心组件。在 Linux 系统中安装 PHP 是搭建 Web 服务的基础步骤,但不同的 Linux 发行版、PHP 版本和应用场景(如 CLI 脚本、Web 服务、容器化部署)可能需要不同的安装策略。
本文将详细介绍在 Linux 系统中安装 PHP 的多种方法(包管理器、源码编译、Docker 容器),配置最佳实践,常见问题排查及性能优化技巧,帮助开发者快速掌握 PHP 安装的全流程。
目录#
- 准备工作:系统环境与依赖检查
- 安装方法一:通过包管理器安装(推荐)
- 2.1 Debian/Ubuntu 系统(apt)
- 2.2 RHEL/CentOS 系统(yum/dnf)
- 2.3 验证安装
- 安装方法二:源码编译安装(自定义需求)
- 3.1 安装编译依赖
- 3.2 下载 PHP 源码
- 3.3 配置编译参数
- 3.4 编译与安装
- 3.5 验证源码安装
- 安装方法三:Docker 容器化部署(隔离与便捷)
- 4.1 拉取 PHP 官方镜像
- 4.2 自定义 Dockerfile 构建
- 4.3 运行 PHP 容器
- PHP 配置与优化
- 5.1 php.ini 配置文件路径
- 5.2 核心配置参数调优
- 5.3 扩展管理(安装/启用)
- 与 Web 服务器集成
- 6.1 Apache + PHP(mod_php 或 PHP-FPM)
- 6.2 Nginx + PHP-FPM(推荐)
- 常见问题与解决方案
- 最佳实践总结
- 参考资料
1. 准备工作:系统环境与依赖检查#
在安装 PHP 前,需确认 Linux 系统环境及必要依赖。
1.1 确认 Linux 发行版#
不同发行版的包管理器不同(如 Debian/Ubuntu 使用 apt,RHEL/CentOS 使用 yum/dnf),需先明确系统版本:
# 查看发行版信息
lsb_release -a # Debian/Ubuntu 系统
cat /etc/os-release # 通用方法1.2 更新系统包#
安装前建议更新系统包到最新版本,避免依赖冲突:
# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
# RHEL/CentOS 8+
sudo dnf update -y
# RHEL/CentOS 7
sudo yum update -y1.3 安装基础依赖#
无论通过哪种方式安装 PHP,以下基础工具通常需要预先安装:
# Debian/Ubuntu
sudo apt install -y wget curl gcc make autoconf libtool
# RHEL/CentOS
sudo dnf install -y wget curl gcc make autoconf libtool2. 安装方法一:通过包管理器安装(推荐)#
通过系统包管理器安装是最便捷、安全的方式,适合大多数场景。官方仓库或第三方源(如 Ondřej Surý 的 PHP 源)提供了稳定的 PHP 版本。
2.1 Debian/Ubuntu 系统(apt)#
2.1.1 添加 PHP 第三方源(可选,获取新版本)#
Ubuntu 官方仓库的 PHP 版本可能较旧(如 Ubuntu 20.04 默认 PHP 7.4)。如需安装 PHP 8.0+,可添加 Ondřej Surý 的 PPA 源:
# 安装依赖
sudo apt install -y software-properties-common
# 添加 PPA 源
sudo add-apt-repository ppa:ondrej/php -y
# 更新源
sudo apt update2.1.2 安装 PHP 及常用扩展#
根据需求选择 PHP 版本(如 8.2),并安装核心模块和扩展(如 php-fpm、php-mysql、php-curl 等):
# 安装 PHP 8.2 及常用扩展(Web 服务场景)
sudo apt install -y php8.2 \
php8.2-fpm \ # PHP-FPM(FastCGI 进程管理器,推荐用于 Nginx/Apache)
php8.2-cli \ # CLI 命令行工具
php8.2-mysql \ # MySQL 数据库扩展
php8.2-curl \ # cURL 网络请求扩展
php8.2-gd \ # 图像处理扩展
php8.2-mbstring \ # 多字节字符串支持
php8.2-xml \ # XML 解析扩展
php8.2-zip # ZIP 压缩支持如需其他扩展(如 Redis、MongoDB),可直接安装对应包(如 php8.2-redis)。
2.2 RHEL/CentOS 系统(yum/dnf)#
2.2.1 添加 EPEL 和 Remi 源(获取新版本)#
RHEL/CentOS 官方仓库的 PHP 版本通常较旧,需添加 Remi 源(专注于 PHP 版本更新):
# 安装 EPEL 源(依赖)
sudo dnf install -y epel-release # RHEL/CentOS 8+
# 或 sudo yum install -y epel-release # RHEL/CentOS 7
# 安装 Remi 源
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm # RHEL/CentOS 8
# 或 sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm # RHEL/CentOS 7
# 启用 PHP 8.2 模块(Remi 源默认禁用新版本,需手动启用)
sudo dnf module enable php:remi-8.2 -y # RHEL/CentOS 8+
# 或 sudo yum-config-manager --enable remi-php82 # RHEL/CentOS 72.2.2 安装 PHP 及扩展#
# 安装 PHP 8.2 及常用扩展
sudo dnf install -y php \
php-fpm \
php-cli \
php-mysqlnd \ # MySQL 原生驱动(比 php-mysql 更推荐)
php-curl \
php-gd \
php-mbstring \
php-xml \
php-zip2.3 验证安装#
安装完成后,通过以下命令验证 PHP 版本及扩展:
# 查看 PHP 版本
php -v
# 查看已安装扩展
php -m # 列出所有加载的扩展
php -i | grep "Loaded Configuration File" # 查看 php.ini 路径输出示例(PHP 8.2):
PHP 8.2.12 (cli) (built: Oct 24 2023 18:26:53) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.12, Copyright (c) Zend Technologies
with Zend OPcache v8.2.12, Copyright (c), by Zend Technologies
3. 安装方法二:源码编译安装(自定义需求)#
当需要高度自定义 PHP 配置(如特定扩展、性能优化、旧版本兼容)时,可通过源码编译安装。
3.1 安装编译依赖#
除基础工具外,还需安装 PHP 编译所需的库:
# Debian/Ubuntu
sudo apt install -y libxml2-dev libssl-dev libcurl4-openssl-dev \
libjpeg-dev libpng-dev libfreetype6-dev libzip-dev libonig-dev
# RHEL/CentOS
sudo dnf install -y libxml2-devel openssl-devel libcurl-devel \
libjpeg-turbo-devel libpng-devel freetype-devel libzip-devel oniguruma-devel3.2 下载 PHP 源码#
从 PHP 官方下载页 获取源码包(以 PHP 8.2.12 为例):
wget https://www.php.net/distributions/php-8.2.12.tar.gz
tar -zxvf php-8.2.12.tar.gz
cd php-8.2.123.3 配置编译参数#
通过 ./configure 命令指定编译选项,核心参数说明:
| 参数 | 说明 |
|---|---|
--prefix=/usr/local/php | 安装路径 |
--enable-fpm | 启用 PHP-FPM(用于 Web 服务) |
--with-mysqli | 启用 MySQLi 扩展(数据库连接) |
--with-pdo-mysql | 启用 PDO MySQL 扩展 |
--with-curl | 启用 cURL 扩展 |
--with-gd | 启用 GD 图像处理扩展 |
--with-mbstring | 启用多字节字符串支持 |
--enable-opcache | 启用 OPcache(性能优化) |
--with-config-file-path=/usr/local/php/etc | 指定 php.ini 路径 |
示例配置(Web 服务场景,启用 FPM 和常用扩展):
./configure \
--prefix=/usr/local/php \
--enable-fpm \
--with-fpm-user=www-data \ # FPM 运行用户(Debian/Ubuntu 通常为 www-data)
--with-fpm-group=www-data \
--with-mysqli \
--with-pdo-mysql \
--with-curl \
--with-gd \
--with-freetype \
--with-jpeg \
--with-mbstring \
--enable-opcache \
--with-zip \
--with-config-file-path=/usr/local/php/etc3.4 编译与安装#
# 编译(-j 选项指定并行任务数,加速编译,通常设为 CPU 核心数)
make -j4
# 安装
sudo make install3.5 验证源码安装#
# 验证 PHP 版本
/usr/local/php/bin/php -v
# 复制默认配置文件
sudo cp php.ini-production /usr/local/php/etc/php.ini
sudo cp sapi/fpm/php-fpm.conf.in /usr/local/php/etc/php-fpm.conf
sudo cp sapi/fpm/www.conf.in /usr/local/php/etc/php-fpm.d/www.conf
# 启动 PHP-FPM(源码安装需手动配置服务)
sudo /usr/local/php/sbin/php-fpm4. 安装方法三:Docker 容器化部署(隔离与便捷)#
Docker 容器化部署可避免系统环境冲突,适合开发环境或微服务架构。
4.1 拉取 PHP 官方镜像#
PHP 官方提供多种镜像(如 php:8.2-cli、php:8.2-fpm、php:8.2-apache):
# 拉取 PHP 8.2 FPM 镜像(用于 Nginx 集成)
docker pull php:8.2-fpm
# 拉取 PHP 8.2 Apache 镜像(内置 Apache 服务器)
docker pull php:8.2-apache4.2 自定义 Dockerfile 构建#
如需添加扩展或自定义配置,可编写 Dockerfile:
# 基于官方 FPM 镜像
FROM php:8.2-fpm
# 安装扩展(通过 docker-php-ext-install)
RUN docker-php-ext-install mysqli pdo_mysql curl gd mbstring zip
# 安装 OPcache 扩展(官方镜像已内置,仅需启用)
RUN docker-php-ext-enable opcache
# 复制自定义 php.ini
COPY php.ini /usr/local/etc/php/构建镜像:
docker build -t my-php:8.2 .4.3 运行 PHP 容器#
4.3.1 运行 PHP CLI 容器#
docker run --rm my-php:8.2 php -v # 临时运行,输出 PHP 版本4.3.2 运行 PHP-FPM 容器(与 Nginx 联动)#
创建 docker-compose.yml 实现 Nginx + PHP-FPM 联动:
version: '3'
services:
php-fpm:
image: my-php:8.2
volumes:
- ./php-code:/var/www/html # 挂载本地代码目录
restart: always
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf # Nginx 配置
- ./php-code:/var/www/html
depends_on:
- php-fpmNginx 配置示例(nginx.conf):
server {
listen 80;
root /var/www/html;
location ~ \.php$ {
fastcgi_pass php-fpm:9000; # 连接 PHP-FPM 容器
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}启动服务:
docker-compose up -d5. PHP 配置与优化#
PHP 核心配置通过 php.ini 文件管理,不同安装方式的路径不同:
- 包管理器安装:
/etc/php/8.2/cli/php.ini(CLI)、/etc/php/8.2/fpm/php.ini(FPM) - 源码安装:
/usr/local/php/etc/php.ini - Docker 容器:
/usr/local/etc/php/php.ini
5.1 核心配置参数调优#
| 参数 | 推荐值(生产环境) | 说明 |
|---|---|---|
memory_limit | 128M | PHP 脚本最大内存限制 |
upload_max_filesize | 20M | 单文件上传最大大小 |
post_max_size | 20M | POST 数据最大大小(需 ≥ upload_max_filesize) |
max_execution_time | 30 | 脚本最大执行时间(秒) |
error_reporting | E_ALL & ~E_DEPRECATED & ~E_STRICT | 错误报告级别(生产环境关闭 NOTICE) |
display_errors | Off | 生产环境禁用错误显示(避免信息泄露) |
log_errors | On | 开启错误日志记录 |
error_log | /var/log/php/error.log | 错误日志路径(需手动创建目录并授权) |
opcache.enable | 1 | 启用 OPcache(提升性能) |
5.2 扩展管理(安装/启用)#
5.2.1 包管理器安装的扩展#
通过包管理器直接安装扩展(如 php8.2-redis),安装后自动启用:
# Debian/Ubuntu
sudo apt install -y php8.2-redis
# RHEL/CentOS
sudo dnf install -y php-redis5.2.2 源码编译的扩展#
如需手动编译扩展(如 PECL 扩展):
# 安装 PECL(PHP 扩展库)
sudo apt install -y php-pear # Debian/Ubuntu
# 或 sudo dnf install -y php-pear # RHEL/CentOS
# 安装 Redis 扩展
sudo pecl install redis
# 启用扩展(编辑 php.ini,添加 extension=redis.so)6. 与 Web 服务器集成#
PHP 需与 Web 服务器(Apache/Nginx)配合才能处理 HTTP 请求,常见方案有:
6.1 Apache + PHP#
6.1.1 mod_php 模块(简单但性能较低)#
包管理器安装 libapache2-mod-php 后自动启用:
# Debian/Ubuntu
sudo apt install -y libapache2-mod-php8.2
sudo a2enmod php8.2 # 启用模块
sudo systemctl restart apache26.1.2 PHP-FPM(推荐,性能更优)#
# 安装 PHP-FPM
sudo apt install -y php8.2-fpm
# 配置 Apache 转发 PHP 请求到 FPM
sudo a2enmod proxy proxy_fcgi
sudo a2enconf php8.2-fpm # 启用 FPM 配置
sudo systemctl restart apache26.2 Nginx + PHP-FPM(推荐)#
Nginx 本身不处理 PHP,需通过 FastCGI 协议转发请求到 PHP-FPM:
-
确保 PHP-FPM 服务运行:
sudo systemctl start php8.2-fpm sudo systemctl enable php8.2-fpm # 开机自启 -
配置 Nginx 服务器块(示例
/etc/nginx/sites-available/default):server { listen 80; server_name example.com; root /var/www/html; index index.php index.html; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; # FPM 监听的 Unix 套接字 } } -
测试并重启 Nginx:
sudo nginx -t # 验证配置 sudo systemctl restart nginx
7. 常见问题与解决方案#
7.1 PHP-FPM 启动失败#
症状:systemctl status php8.2-fpm 显示失败。
排查:查看日志 journalctl -u php8.2-fpm 或 /var/log/php8.2-fpm.log。
常见原因:
- 端口/套接字被占用(修改
www.conf中的listen配置)。 - 权限不足(确保
www-data用户对日志/运行目录有读写权限)。
7.2 扩展未加载#
症状:php -m 未显示目标扩展(如 redis)。
解决方案:
- 确认扩展已安装(包管理器或 PECL)。
- 检查
php.ini中是否添加extension=扩展名.so。 - 重启 PHP-FPM/Apache/Nginx。
7.3 502 Bad Gateway(Nginx + FPM)#
症状:浏览器访问 PHP 页面返回 502。
常见原因:
- PHP-FPM 未运行(
sudo systemctl start php8.2-fpm)。 - Nginx 配置中
fastcgi_pass路径错误(如套接字路径不正确)。
8. 最佳实践总结#
- 优先使用包管理器:简单、安全、便于更新,适合大多数场景。
- 生产环境禁用
display_errors:避免敏感信息泄露,通过error_log记录错误。 - 启用 OPcache:显著提升 PHP 性能(默认已启用,可调整
opcache相关参数)。 - 使用 PHP-FPM:相比 mod_php,FPM 更轻量、可控,支持动态进程管理。
- 定期更新 PHP:及时修复安全漏洞(通过
apt upgrade或dnf update)。 - 限制权限:PHP-FPM 运行用户(如
www-data)仅授予必要目录的读写权限。 - 容器化隔离:开发/测试环境推荐使用 Docker,避免环境冲突。