Skip to content

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(如未安装)

bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

步骤 2:安装 PHP

bash
# 安装最新版 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:验证安装

bash
php -v
# PHP 8.2.x (cli) (built: ...)

步骤 4:查看安装路径和配置

bash
# 查看 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.2

Homebrew 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 版本)

bash
# 更新软件源
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 及常用扩展

bash
# 安装 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:验证安装

bash
php -v
# PHP 8.2.x (cli) (built: ...)

php -m
# 查看已加载的扩展模块列表

CentOS/RHEL:YUM/DNF 安装

CentOS 和 RHEL 系统默认仓库中的 PHP 版本通常较旧,需要使用 EPEL 和 Remi 仓库。

步骤 1:安装 EPEL 和 Remi 仓库

bash
# 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

bash
# 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:验证安装

bash
php -v

# 查看 php.ini 位置
php -i | grep php.ini

FreeBSD:Ports 安装

FreeBSD 提供了 Ports 和 Package 两种安装方式。

bash
# 使用 Package(二进制预编译,速度快)
sudo pkg install php82 php82-extensions

# 使用 Ports(可自定义编译选项,更灵活)
cd /usr/ports/lang/php82
sudo make config
sudo make install clean

编译安装

从源码编译安装 PHP 可以获得最大的灵活性和性能优化空间,适用于有特殊需求的生产环境。

前置依赖

在编译之前,需要安装必要的开发库和工具:

bash
# 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

下载源码并配置

bash
# 下载 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

编译与安装

bash
# 编译(-j 参数指定并行任务数,建议等于 CPU 核心数)
make -j$(nproc)

# 安装到 --prefix 指定的目录
sudo make install

# 创建 php.ini 配置文件
sudo cp php.ini-production /usr/local/php/etc/php.ini

配置环境变量

bash
# 将 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

bash
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 版本

bash
# 查看可用的 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 -v

phpbrew 变体(Variants)

phpbrew 使用变体系统来控制编译选项:

bash
# 查看所有可用变体
phpbrew variants

# 安装时启用/禁用变体
phpbrew install 8.2 +mysql +pgsql +fpm -debug

# 常用变体说明:
# +default     — 启用常用默认扩展
# +mysql       — 启用 MySQL/MariaDB 支持
# +pgsql       — 启用 PostgreSQL 支持
# +fpm         — 启用 FPM SAPI
# +debug       — 启用调试模式
# +opcache     — 启用 OPcache
# -cli         — 禁用 CLI SAPI

Homebrew 版本切换(macOS)

在 macOS 上,如果通过 Homebrew 安装了多个 PHP 版本,可以手动切换:

bash
# 停止当前 PHP 服务
brew unlink php
brew unlink php@8.1 2>/dev/null

# 启用目标版本
brew link php@8.2 --force

# 验证
php -v

也可以使用 s-php 脚本实现自动切换(需单独安装)。

验证安装

无论使用哪种安装方式,安装完成后都应进行全面的验证。

基本验证

bash
# 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
<?php
declare(strict_types=1);

// 输出完整的 PHP 配置信息
phpinfo();

// 如果只想检查特定项
// phpinfo(INFO_GENERAL);
// phpinfo(INFO_MODULES);
bash
# 运行测试脚本
php info.php

安全提醒

在生产环境中,phpinfo() 会暴露大量服务器信息(如路径、模块版本、环境变量等)。仅在开发环境中使用,部署前务必删除该文件。

功能验证脚本

php
<?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 配置项

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 = 64M

CLI 和 FPM 配置分离

在 Ubuntu/Debian 系统上,CLI 和 FPM 使用独立的 php.ini 文件。修改 CLI 的配置不会影响 FPM,反之亦然。可以通过 php -i | grep "Configuration File" 查看当前加载的是哪个配置文件。

环境变量配置

将 PHP 的可执行路径加入系统的 PATH 环境变量,确保可以在任意目录下使用 php 命令:

bash
# 临时生效(当前终端会话)
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

扩展目录配置

bash
# 查看当前扩展目录
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=opcache

Composer 安装

Composer 是 PHP 的包依赖管理工具,安装 PHP 后通常需要安装 Composer:

bash
# 安装 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 全栈开发环境的完整流程:

bash
# 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.conf
nginx
server {
    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;
    }
}
bash
# 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://localhost

Ubuntu 服务器生产环境部署

bash
#!/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 特有注意事项

  1. Apple Silicon (M1/M2/M3) 兼容性:Homebrew 现已原生支持 Apple Silicon,PHP 在 ARM 架构上运行良好。部分较旧的 PECL 扩展可能需要重新编译。

  2. macOS 自带 PHP:macOS 在 Catalina (10.15) 之前的版本自带了 PHP,但版本通常非常旧。请勿使用系统自带版本进行开发,通过 Homebrew 安装独立版本。

  3. 权限问题:在 macOS 上使用 FPM 时,确保 listen 端口未被占用,且 PHP-FPM 进程有权限写入目标目录。

Linux 特有注意事项

  1. SELinux:在 CentOS/RHEL 上,SELinux 可能会阻止 PHP-FPM 写入特定目录。可以通过以下命令排查:

    bash
    # 查看 SELinux 状态
    getenforce
    
    # 临时关闭 SELinux(仅用于排查)
    sudo setenforce 0
  2. 端口冲突:如果系统已安装 Apache 的 mod_php,使用 PHP-FPM 时需要避免 80/443 端口冲突。

  3. 防火墙配置:确保防火墙允许 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 配置是否正确

最佳实践

  1. 使用版本管理工具:即使在生产环境,也推荐使用版本管理工具(如 phpbrew)或包管理器来安装 PHP,而非手动编译。这样更便于版本升级和安全补丁管理。

  2. 定期更新 PHP 版本:关注 PHP 官方发布的安全更新,及时升级到最新稳定版。PHP 每月发布安全补丁,每年发布一个主要版本。

  3. 分离开发和生产环境:开发环境可以安装所有扩展并开启调试模式,生产环境应只安装必需的扩展,关闭调试和错误显示。

  4. 使用 OPcache:在生产环境始终启用 OPcache,可以显著提升 PHP 性能(通常提升 30%~50%)。PHP 8.0+ 还支持 JIT 编译。

  5. 配置管理自动化:使用 Ansible、Puppet 或 Docker 等工具自动化 PHP 安装和配置过程,确保环境一致性。

  6. 备份配置文件:在修改 php.ini 或 FPM 配置前,先备份原文件。配置变更后重启 PHP-FPM 服务使配置生效。

下一节

现在你已经成功在 Unix/macOS 系统上安装了 PHP,接下来将学习在 Windows 系统上的安装方法。如果你使用 Windows 作为开发环境,请继续阅读 Windows 安装

如果你需要将 PHP 部署到云服务器,可以跳至 云计算平台安装

参考链接