Unix/macOS 安装
PHP 是全球使用最广泛的服务端编程语言之一,在 Unix 和 macOS 系统上拥有成熟的安装生态。macOS 本身基于 Darwin(Unix 变体),因此绝大多数在 Linux 上可用的安装方式同样适用于 macOS。本节将详细介绍在 Unix/Linux/macOS 系统上安装 PHP 的多种方法,包括包管理器安装、源码编译安装以及多版本管理工具的使用。
无论你是初学者搭建本地开发环境,还是运维工程师在生产服务器上部署 PHP 运行时,都能在本节找到合适的安装方案。
前置知识
在开始安装之前,建议你具备以下基础知识:
- 熟悉终端(Terminal)的基本操作,能执行常见 Shell 命令
- 了解
PATH环境变量的含义和配置方法 - 具备基本的
sudo权限管理概念
基础概念
PHP 的发布形式
PHP 官方提供两种主要的发布形式:
| 形式 | 说明 | 适用场景 |
|---|---|---|
| 预编译二进制包 | 由发行版或第三方打包好的可执行文件 | 快速部署、生产环境 |
| 源代码包 | 需要自行编译的 C 语言源码 | 定制化需求、最新特性 |
PHP 版本生命周期
PHP 官方遵循语义化版本控制,每年发布一个新版本。当前活跃的版本线如下:
- PHP 8.3 — 最新稳定版(2023年11月发布)
- PHP 8.2 — 活跃支持(2022年12月发布)
- PHP 8.1 — 安全更新(2021年11月发布)
版本选择建议
生产环境建议使用当前获得活跃支持的版本(PHP 8.2+)。PHP 8.1 仅接受安全修复,不再获得新功能更新。请勿在生产环境中使用已结束生命周期的版本。
SAPI(服务器应用编程接口)
安装 PHP 时需要选择对应的 SAPI,不同的 SAPI 决定了 PHP 的运行方式:
- CLI SAPI — 命令行运行,用于脚本执行和开发调试
- FPM SAPI — FastCGI 进程管理器,配合 Nginx/Apache 使用
- Apache SAPI — 作为 Apache 模块运行(mod_php)
包管理器安装
macOS:Homebrew 安装
Homebrew 是 macOS 上最流行的包管理器,安装 PHP 非常简便。
步骤 1:安装 Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"步骤 2:安装 PHP
# 安装最新版 PHP(默认 8.3)
brew install php
# 安装指定版本
brew install php@8.2
brew install php@8.1
# 如果需要重新链接
brew unlink php
brew link php@8.2 --force步骤 3:验证安装
php -v
# PHP 8.2.x (cli) (built: ...)步骤 4:查看安装路径和配置
# 查看 PHP 可执行文件路径
which php
# /opt/homebrew/bin/php (Apple Silicon) 或 /usr/local/bin/php (Intel)
# 查看 php.ini 路径
php --ini
# Configuration File (php.ini) Path: /opt/homebrew/etc/php/8.2Homebrew PHP 扩展
Homebrew 提供了许多常用扩展作为独立的 formula,可以通过 brew install php@8.2-mongodb 等方式安装。使用 brew install php@8.2 后,部分常用扩展(如 opcache、zip、pcntl)已默认包含。
Ubuntu/Debian:APT 安装
Ubuntu 和 Debian 系统使用 APT 包管理器,可以通过 PPA 获取最新的 PHP 版本。
步骤 1:添加 Ondřej Surý 的 PPA(提供最新 PHP 版本)
# 更新软件源
sudo apt update
# 添加 PHP PPA
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update步骤 2:安装 PHP 及常用扩展
# 安装 PHP 8.2 CLI
sudo apt install php8.2-cli -y
# 安装常用扩展
sudo apt install php8.2-fpm php8.2-mysql php8.2-mbstring \
php8.2-xml php8.2-curl php8.2-zip php8.2-gd \
php8.2-intl php8.2-readline -y
# 安装开发工具包(如需编译 PECL 扩展)
sudo apt install php8.2-dev -y步骤 3:验证安装
php -v
# PHP 8.2.x (cli) (built: ...)
php -m
# 查看已加载的扩展模块列表CentOS/RHEL:YUM/DNF 安装
CentOS 和 RHEL 系统默认仓库中的 PHP 版本通常较旧,需要使用 EPEL 和 Remi 仓库。
步骤 1:安装 EPEL 和 Remi 仓库
# CentOS 7
sudo yum install epel-release -y
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
# CentOS 8 / RHEL 8
sudo dnf install epel-release -y
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y步骤 2:启用 Remi 模块并安装 PHP
# CentOS 8 / RHEL 8 使用 DNF
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.2 -y
sudo dnf install php php-cli php-fpm php-mysqlnd php-mbstring \
php-xml php-curl php-zip php-gd php-intl -y
# CentOS 7 使用 YUM
sudo yum-config-manager --enable remi-php82
sudo yum install php php-cli php-fpm php-mysqlnd php-mbstring \
php-xml php-curl php-zip php-gd php-intl -y步骤 3:验证安装
php -v
# 查看 php.ini 位置
php -i | grep php.iniFreeBSD:Ports 安装
FreeBSD 提供了 Ports 和 Package 两种安装方式。
# 使用 Package(二进制预编译,速度快)
sudo pkg install php82 php82-extensions
# 使用 Ports(可自定义编译选项,更灵活)
cd /usr/ports/lang/php82
sudo make config
sudo make install clean编译安装
从源码编译安装 PHP 可以获得最大的灵活性和性能优化空间,适用于有特殊需求的生产环境。
前置依赖
在编译之前,需要安装必要的开发库和工具:
# macOS(通过 Homebrew)
brew install autoconf pkg-config libxml2 libiconv openssl@3 \
bzip2 zlib icu4c oniguruma libjpeg libpng freetype webp
# Ubuntu/Debian
sudo apt install build-essential autoconf bison re2c libxml2-dev \
libsqlite3-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev \
libpng-dev libfreetype-dev libicu-dev libonig-dev libzip-dev \
libssl-dev libreadline-dev -y
# CentOS/RHEL
sudo dnf install gcc autoconf bison re2c libxml2-devel \
sqlite-devel bzip2-devel curl-devel libjpeg-devel \
libpng-devel freetype-devel libicu-devel oniguruma-devel \
libzip-devel openssl-devel readline-devel -y下载源码并配置
# 下载 PHP 8.2 源码
curl -LO https://www.php.net/distributions/php-8.2.20.tar.gz
tar -zxf php-8.2.20.tar.gz
cd php-8.2.20
# 运行 configure 脚本(启用常用功能)
./buildconf --force
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-mbstring \
--enable-ftp \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-intl \
--with-curl \
--with-openssl \
--with-zlib \
--with-bz2 \
--with-readline \
--with-iconv \
--with-zip \
--with-freetype \
--with-jpeg \
--with-webp \
--enable-gd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data编译与安装
# 编译(-j 参数指定并行任务数,建议等于 CPU 核心数)
make -j$(nproc)
# 安装到 --prefix 指定的目录
sudo make install
# 创建 php.ini 配置文件
sudo cp php.ini-production /usr/local/php/etc/php.ini配置环境变量
# 将 PHP 可执行文件加入 PATH
echo 'export PATH="/usr/local/php/bin:/usr/local/php/sbin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 验证
php -v
# PHP 8.2.20 (cli) (built: ...)编译选项说明
./configure 脚本支持大量编译选项。使用 ./configure --help 查看完整列表。常用选项包括:
--enable-debug:启用调试模式,开发时推荐--disable-all:最小化安装,仅启用显式指定的扩展--enable-opcache:启用 OPcache 字节码缓存,生产环境强烈推荐
多版本管理
在开发过程中,经常需要在多个 PHP 版本之间切换。以下是几种流行的多版本管理方案。
phpbrew
phpbrew 是一个专用于管理多个 PHP 版本的工具,支持编译安装和快速切换。
安装 phpbrew
curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
chmod +x phpbrew.phar
sudo mv phpbrew.phar /usr/local/bin/phpbrew
# 初始化 phpbrew
phpbrew init
# 添加初始化脚本到 Shell 配置
echo '[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc' >> ~/.bashrc
source ~/.bashrc使用 phpbrew 安装和管理 PHP 版本
# 查看可用的 PHP 版本
phpbrew known
# 安装指定版本(默认 +default 变体)
phpbrew install 8.2 +default
# 安装带特定扩展的版本
phpbrew install 8.1 +openssl +mbstring +curl +zip +sqlite +fpm
# 列出已安装的版本
phpbrew list
# 切换版本
phpbrew switch php-8.2.20
# 或临时使用
phpbrew use php-8.1.30
# 验证当前版本
php -vphpbrew 变体(Variants)
phpbrew 使用变体系统来控制编译选项:
# 查看所有可用变体
phpbrew variants
# 安装时启用/禁用变体
phpbrew install 8.2 +mysql +pgsql +fpm -debug
# 常用变体说明:
# +default — 启用常用默认扩展
# +mysql — 启用 MySQL/MariaDB 支持
# +pgsql — 启用 PostgreSQL 支持
# +fpm — 启用 FPM SAPI
# +debug — 启用调试模式
# +opcache — 启用 OPcache
# -cli — 禁用 CLI SAPIHomebrew 版本切换(macOS)
在 macOS 上,如果通过 Homebrew 安装了多个 PHP 版本,可以手动切换:
# 停止当前 PHP 服务
brew unlink php
brew unlink php@8.1 2>/dev/null
# 启用目标版本
brew link php@8.2 --force
# 验证
php -v也可以使用 s-php 脚本实现自动切换(需单独安装)。
验证安装
无论使用哪种安装方式,安装完成后都应进行全面的验证。
基本验证
# 1. 检查 PHP 版本
php -v
# 2. 查看 PHP 信息摘要
php -i
# 3. 列出已编译的模块
php -m
# 4. 确认 php.ini 路径
php --ini
# 5. 检查特定扩展是否已加载
php -m | grep -i mbstring
# 6. 查看 PHP 配置参数
php -r "echo ini_get('memory_limit');"创建测试脚本
创建一个 info.php 文件进行更详细的检查:
<?php
declare(strict_types=1);
// 输出完整的 PHP 配置信息
phpinfo();
// 如果只想检查特定项
// phpinfo(INFO_GENERAL);
// phpinfo(INFO_MODULES);# 运行测试脚本
php info.php安全提醒
在生产环境中,phpinfo() 会暴露大量服务器信息(如路径、模块版本、环境变量等)。仅在开发环境中使用,部署前务必删除该文件。
功能验证脚本
<?php
declare(strict_types=1);
echo "PHP 版本: " . PHP_VERSION . "\n";
echo "运行 SAPI: " . PHP_SAPI . "\n";
echo "当前用户: " . get_current_user() . "\n";
echo "内存限制: " . ini_get('memory_limit') . "\n";
echo "最大执行时间: " . ini_get('max_execution_time') . "s\n";
echo "时区: " . date_default_timezone_get() . "\n";
echo "已加载扩展数: " . count(get_loaded_extensions()) . "\n";
// 验证关键扩展
$requiredExtensions = ['mbstring', 'json', 'xml', 'curl', 'openssl'];
foreach ($requiredExtensions as $ext) {
$status = extension_loaded($ext) ? '✓ 已加载' : '✗ 未加载';
echo "{$ext}: {$status}\n";
}详细配置
php.ini 配置文件
PHP 的核心配置通过 php.ini 文件管理。根据安装方式不同,php.ini 文件位置也会不同:
| 安装方式 | php.ini 典型路径 |
|---|---|
| Homebrew (macOS) | /opt/homebrew/etc/php/8.2/php.ini |
| APT (Ubuntu/Debian) | /etc/php/8.2/cli/php.ini(CLI)/etc/php/8.2/fpm/php.ini(FPM) |
| YUM (CentOS/RHEL) | /etc/php.ini |
| 源码编译 | /usr/local/php/etc/php.ini |
常用的 php.ini 配置项
; 内存限制(建议根据应用调整)
memory_limit = 256M
; 最大执行时间(单位:秒,0 表示无限制)
max_execution_time = 30
; 最大上传文件大小
upload_max_filesize = 64M
; POST 数据最大大小
post_max_size = 128M
; 时区设置(重要!)
date.timezone = Asia/Shanghai
; 错误报告级别(开发环境建议 E_ALL)
error_reporting = E_ALL
; 显示错误(仅开发环境开启)
display_errors = On
; 错误日志路径
error_log = /var/log/php_error.log
; OPcache 配置(PHP 8.1+)
[opcache]
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 0
opcache.save_comments = 1
opcache.jit_buffer_size = 64MCLI 和 FPM 配置分离
在 Ubuntu/Debian 系统上,CLI 和 FPM 使用独立的 php.ini 文件。修改 CLI 的配置不会影响 FPM,反之亦然。可以通过 php -i | grep "Configuration File" 查看当前加载的是哪个配置文件。
环境变量配置
将 PHP 的可执行路径加入系统的 PATH 环境变量,确保可以在任意目录下使用 php 命令:
# 临时生效(当前终端会话)
export PATH="/usr/local/php/bin:$PATH"
# 永久生效(添加到 Shell 配置文件)
# Bash 用户
echo 'export PATH="/usr/local/php/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Zsh 用户(macOS 默认)
echo 'export PATH="/usr/local/php/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc扩展目录配置
# 查看当前扩展目录
php -i | grep extension_dir
# extension_dir => /usr/local/php/lib/php/extensions/no-debug-non-zts-20220829
# 在 php.ini 中添加扩展
# 方式 1:使用 extension 指令(动态加载 .so 文件)
extension=mbstring
extension=mysqli
# 方式 2:使用 zend_extension 指令(Zend 扩展,如 OPcache、Xdebug)
zend_extension=opcacheComposer 安装
Composer 是 PHP 的包依赖管理工具,安装 PHP 后通常需要安装 Composer:
# 安装 Composer
curl -sS https://getcomposer.org/installer | php
# 移动到全局可执行路径
sudo mv composer.phar /usr/local/bin/composer
# 验证安装
composer --version
# Composer version 2.x.x 2024-xx-xx实战示例
搭建完整开发环境(macOS + Homebrew)
以下是在 macOS 上通过 Homebrew 搭建 PHP 全栈开发环境的完整流程:
# 1. 安装 PHP 8.2 及常用扩展
brew install php@8.2
# 2. 启用 PHP 8.2
brew unlink php 2>/dev/null
brew link php@8.2 --force
# 3. 安装数据库
brew install mysql
brew services start mysql
# 4. 安装 Web 服务器
brew install nginx
brew services start nginx
# 5. 安装 Composer
brew install composer
# 6. 配置 Nginx 站点
# 编辑 /opt/homebrew/etc/nginx/servers/default.confserver {
listen 80;
server_name localhost;
root /Users/yourname/Sites;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9072;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}# 7. 启动 PHP-FPM
brew services start php@8.2
# 8. 创建测试文件
mkdir -p ~/Sites
echo '<?php echo "Hello, PHP ' . PHP_VERSION . '!\n";' > ~/Sites/index.php
# 9. 访问 http://localhost 验证
curl http://localhostUbuntu 服务器生产环境部署
#!/bin/bash
# PHP 生产环境快速部署脚本(Ubuntu 22.04)
set -e
# 更新系统
sudo apt update && sudo apt upgrade -y
# 添加 PHP PPA
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
# 安装 PHP 8.2 及扩展
sudo apt install -y php8.2-fpm php8.2-cli php8.2-common \
php8.2-mysql php8.2-redis php8.2-mbstring \
php8.2-xml php8.2-curl php8.2-zip \
php8.2-gd php8.2-intl php8.2-bcmath \
php8.2-opcache php8.2-readline
# 安装 Nginx
sudo apt install -y nginx
# 优化 PHP-FPM 配置
sudo cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/www.conf.bak
# 启动服务
sudo systemctl enable php8.2-fpm nginx
sudo systemctl start php8.2-fpm nginx
echo "部署完成!PHP 版本:"
php -v注意事项
macOS 特有注意事项
Apple Silicon (M1/M2/M3) 兼容性:Homebrew 现已原生支持 Apple Silicon,PHP 在 ARM 架构上运行良好。部分较旧的 PECL 扩展可能需要重新编译。
macOS 自带 PHP:macOS 在 Catalina (10.15) 之前的版本自带了 PHP,但版本通常非常旧。请勿使用系统自带版本进行开发,通过 Homebrew 安装独立版本。
权限问题:在 macOS 上使用 FPM 时,确保
listen端口未被占用,且 PHP-FPM 进程有权限写入目标目录。
Linux 特有注意事项
SELinux:在 CentOS/RHEL 上,SELinux 可能会阻止 PHP-FPM 写入特定目录。可以通过以下命令排查:
bash# 查看 SELinux 状态 getenforce # 临时关闭 SELinux(仅用于排查) sudo setenforce 0端口冲突:如果系统已安装 Apache 的 mod_php,使用 PHP-FPM 时需要避免 80/443 端口冲突。
防火墙配置:确保防火墙允许 Web 服务器所需的端口通信。
编译安装常见问题
| 问题 | 解决方案 |
|---|---|
configure: error: libxml2 not found | 安装 libxml2-dev(Debian)或 libxml2-devel(RHEL) |
undefined reference to iconv | 添加 --with-iconv=/usr 或安装 libiconv-dev |
cannot find openssl | 指定 OpenSSL 路径:--with-openssl=/usr/local/ssl |
| 编译速度慢 | 使用 make -j$(nproc) 启用并行编译 |
| 扩展找不到 .so 文件 | 检查 extension_dir 配置是否正确 |
最佳实践
使用版本管理工具:即使在生产环境,也推荐使用版本管理工具(如 phpbrew)或包管理器来安装 PHP,而非手动编译。这样更便于版本升级和安全补丁管理。
定期更新 PHP 版本:关注 PHP 官方发布的安全更新,及时升级到最新稳定版。PHP 每月发布安全补丁,每年发布一个主要版本。
分离开发和生产环境:开发环境可以安装所有扩展并开启调试模式,生产环境应只安装必需的扩展,关闭调试和错误显示。
使用 OPcache:在生产环境始终启用 OPcache,可以显著提升 PHP 性能(通常提升 30%~50%)。PHP 8.0+ 还支持 JIT 编译。
配置管理自动化:使用 Ansible、Puppet 或 Docker 等工具自动化 PHP 安装和配置过程,确保环境一致性。
备份配置文件:在修改
php.ini或 FPM 配置前,先备份原文件。配置变更后重启 PHP-FPM 服务使配置生效。
下一节
现在你已经成功在 Unix/macOS 系统上安装了 PHP,接下来将学习在 Windows 系统上的安装方法。如果你使用 Windows 作为开发环境,请继续阅读 Windows 安装。
如果你需要将 PHP 部署到云服务器,可以跳至 云计算平台安装。