[TOC] #### 1. 环境准备 --- 在 macOS 上使用 [Homebrew](https://brew.sh) 安装和管理 PHP 是目前最主流的方案,它不仅安装简单,还能轻松实现多版本共存和切换 + 相比手动编译安装,它的优点是安装简单、版本切换方便、依赖自动管理 在安装 PHP 版本之前,确保 Homebrew 已经安装(如果未安装,可查看:[Homebrew 介绍及安装教程](https://www.itqaq.com/index/292.html)) ```bash brew -v ``` 如果已经安装 Homebrew,建议升级到最新版本,运行以下命令: ```bash brew update ``` #### 2. 安装最新版本 --- Homebrew 安装 PHP 的命令非常简单,在终端执行: + 该命令会安装当前 Homebrew 仓库中最新的 PHP 稳定版本,安装过程会自动处理大部分依赖,包括常用的 PHP 扩展 ```bash brew install php ``` 卸载安装的最新稳定版本 ```bash brew uninstall php ``` 首次安装 PHP 版本会自动创建命令软链接到 `$HOMEBREW_PREFIX/bin` 目录,也就是自动配置终端默认 PHP 版本 ```bash # 验证 ls -al $HOMEBREW_PREFIX/bin | grep php$ # 查看版本号,测试 php -v ``` #### 3. 安装指定版本 --- 当我们需要安装指定 PHP 版本时,先运行以下命令,查看有哪些可用的版本: ```bash brew search php ``` 默认情况下,Homebrew 官方仓库中的 PHP 版本都是比较新的,那么你会看到: + 可以看到较新的几个版本:php@8.4、php@8.3、php@8.2、php@8.1 + 还有一个没有带版本号的 `php`,这是当前最新的稳定版(8.5 当前时间 2026年5月21号) ```plaintext $ brew search php ==> Formulae brew-php-switcher php@8.1 (deprecated) phpantom-lsp phpstan pyp php php@8.2 phpbrew phpunit php-code-sniffer php@8.3 phpmd (deprecated) pop php-cs-fixer php@8.4 phpmyadmin pcp (deprecated) ``` 由于 Homebrew 官方仓库会逐步淘汰旧版本,如果需要安装较老的 PHP 版本,可以通过第三方仓库(Tap)来实现 + 目前最常用的是:[shivammathur/php](https://github.com/shivammathur/homebrew-php) ```bash # 添加第三方仓库 brew tap shivammathur/php ``` 使用示例(Ubuntu 24.04 系统,可以看到它是将第三方仓库下载到了本地): ```plaintext $ brew tap shivammathur/php ==> Tapping shivammathur/php Cloning into '/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/shivammathur/homebrew-php'... remote: Enumerating objects: 48393, done. remote: Counting objects: 100% (197/197), done. remote: Compressing objects: 100% (43/43), done. remote: Total 48393 (delta 186), reused 161 (delta 154), pack-reused 48196 (from 4) Receiving objects: 100% (48393/48393), 7.66 MiB | 586.00 KiB/s, done. Resolving deltas: 100% (39391/39391), done. Tapped 54 formulae (96 files, 10.7MB). ``` 重新搜索 PHP 可以看到非常多的 PHP 版本可下载,如下所示: ```plaintext $ brew search php ==> Formulae brew-php-switcher shivammathur/php/php@7.0 (deprecated) shivammathur/php/php@8.1 (deprecated) php shivammathur/php/php@7.0-debug (deprecated) shivammathur/php/php@8.1-debug (deprecated) php-code-sniffer shivammathur/php/php@7.0-debug-zts (deprecated) shivammathur/php/php@8.1-debug-zts (deprecated) php-cs-fixer shivammathur/php/php@7.0-zts (deprecated) shivammathur/php/php@8.1-zts (deprecated) php@8.1 (deprecated) shivammathur/php/php@7.1 (deprecated) shivammathur/php/php@8.2 php@8.2 shivammathur/php/php@7.1-debug (deprecated) shivammathur/php/php@8.2-debug php@8.3 shivammathur/php/php@7.1-debug-zts (deprecated) shivammathur/php/php@8.2-debug-zts php@8.4 shivammathur/php/php@7.1-zts (deprecated) shivammathur/php/php@8.2-zts phpantom-lsp shivammathur/php/php@7.2 (deprecated) shivammathur/php/php@8.3 phpbrew shivammathur/php/php@7.2-debug (deprecated) shivammathur/php/php@8.3-debug phpmd (disabled) shivammathur/php/php@7.2-debug-zts (deprecated) shivammathur/php/php@8.3-debug-zts phpmyadmin shivammathur/php/php@7.2-zts (deprecated) shivammathur/php/php@8.3-zts phpstan shivammathur/php/php@7.3 (deprecated) shivammathur/php/php@8.4 phpunit shivammathur/php/php@7.3-debug (deprecated) shivammathur/php/php@8.4-debug shivammathur/php/autoconf@2.69 (deprecated) shivammathur/php/php@7.3-debug-zts (deprecated) shivammathur/php/php@8.4-debug-zts shivammathur/php/bison@2.7 (deprecated) shivammathur/php/php@7.3-zts (deprecated) shivammathur/php/php@8.4-zts shivammathur/php/php shivammathur/php/php@7.4 (deprecated) shivammathur/php/php@8.6 shivammathur/php/php-debug shivammathur/php/php@7.4-debug (deprecated) shivammathur/php/php@8.6-debug shivammathur/php/php-debug-zts shivammathur/php/php@7.4-debug-zts (deprecated) shivammathur/php/php@8.6-debug-zts shivammathur/php/php-zts shivammathur/php/php@7.4-zts (deprecated) shivammathur/php/php@8.6-zts shivammathur/php/php@5.6 (deprecated) shivammathur/php/php@8.0 (deprecated) pop shivammathur/php/php@5.6-debug (deprecated) shivammathur/php/php@8.0-debug (deprecated) pcp (disabled) shivammathur/php/php@5.6-debug-zts (deprecated) shivammathur/php/php@8.0-debug-zts (deprecated) pyp shivammathur/php/php@5.6-zts (deprecated) shivammathur/php/php@8.0-zts (deprecated) ``` 现在就可以根据项目要求,安装我们需要的 PHP 版本,如下所示: ```bash brew install shivammathur/php/php@5.6 brew install shivammathur/php/php@7.3 brew install shivammathur/php/php@7.4 brew install shivammathur/php/php@8.0 brew install shivammathur/php/php@8.3 ``` 卸载指定 PHP 版本: ```bash # 以下两种写法都可以,shivammathur/php 可以省略 brew uninstall php@8.0 brew uninstall shivammathur/php/php@8.0 ``` #### 4. 安装 PHP 扩展 --- 现在我们已经使用 Homebrew 成功安装了 PHP 版本,接下来学习如何安装 PHP 扩展,主要有两种方法: + 使用 PECL 和使用 `shivammathur/extensions` 第三方库 方法一:使用 PECL 安装(通用方法) ```bash # 搜索扩展 pecl search redis # 安装扩展 pecl install redis ``` 方法二:使用 shivammathur/extensions(推荐) 这是专门为 `shivammathur/php` 维护的扩展库,兼容性最好 ```bash # 添加第三方仓库(PHP 扩展库) brew tap shivammathur/extensions # 搜索 redis,查看可以用的 redis 扩展 brew search redis # 安装 PHP8.2 的 Redis 扩展 brew install shivammathur/extensions/phpredis@8.2 ``` Homebrew 通常会自动完成 `php.ini` 配置,但如果需要手动确认或修改,运行以下命令查看配置文件路径 + 先找到 `php.ini` 存放位置,然后再查看或编辑该配置文件 ```bash php --ini ``` 验证安装: ```bash php -m | grep redis ``` #### 5. 安装 PHP 5.6 示例 --- 在 Ubuntu 24.04 安装 PHP 5.6 使用示例: + Installing dependencies:自动安装该版本所需的依赖包 + Warning: shivammathur/php/php@5.6 has been deprecated:该版本已弃用(停止维护) ```plaintext $ brew install shivammathur/php/php@5.6 ==> Auto-updating Homebrew... ... ==> Homebrew collects anonymous analytics. ... ==> Homebrew is run entirely by unpaid volunteers. Please consider donating: ... ==> Fetching downloads for: php@5.6 Warning: shivammathur/php/php@5.6 has been deprecated because it is deprecated upstream! It was disabled on 2019-12-31. ✔︎ Bottle Manifest php@5.6 (5.6.40_15) Downloaded 66.9KB/ 66.9KB ✔︎ Bottle Manifest ncurses (6.6) Downloaded 11.9KB/ 11.9KB ✔︎ Bottle Manifest readline (8.3.3) Downloaded 10.0KB/ 10.0KB ... ==> Installing php@5.6 from shivammathur/php ==> Installing dependencies for shivammathur/php/php@5.6: ncurses, readline, zlib-ng-compat, libxcrypt, sqlite, util-linux, apr, ca-certificates, openssl@3, m4, libtool, unixodbc, expat, apr-util, aspell, gdbm, perl, autoconf, brotli, libnghttp2, libnghttp3, libngtcp2, libssh2, lz4, xz, zstd, libunistring, libidn2, keyutils, krb5, cyrus-sasl, openldap, curl, freetds, libpng, bzip2, freetype, fontconfig, jpeg-turbo, libvmaf, aom, dav1d, libavif, libtiff, giflib, webp, gd, gmp, icu4c@78, jpeg, libpq, xorgproto, libxau, libxdmcp, libxcb, libx11, libxpm, libzip, pcre, tidy-html5, libedit, libxml2, libgpg-error, libgcrypt and libxslt ==> Installing shivammathur/php/php@5.6 dependency: ncurses ==> Pouring ncurses--6.6.x86_64_linux.bottle.tar.gz 🍺 /home/linuxbrew/.linuxbrew/Cellar/ncurses/6.6: 4,071 files, 11.7MB ==> Installing shivammathur/php/php@5.6 dependency: readline ==> Pouring readline--8.3.3.x86_64_linux.bottle.tar.gz ... ==> Installing shivammathur/php/php@5.6 dependency: libxslt ==> Pouring libxslt--1.1.45.x86_64_linux.bottle.1.tar.gz 🍺 /home/linuxbrew/.linuxbrew/Cellar/libxslt/1.1.45: 102 files, 1.4MB ==> Installing shivammathur/php/php@5.6 ==> Pouring php@5.6--5.6.40_15.x86_64_linux.bottle.tar.gz ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set php_ini /home/linuxbrew/.linuxbrew/etc/php/5.6/php.ini system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set php_dir /home/linuxbrew/.linuxbrew/share/pear@5.6 system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set doc_dir /home/linuxbrew/.linuxbrew/share/pear@5.6/doc system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set ext_dir /home/linuxbrew/.linuxbrew/lib/php/pecl/20131226 system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set bin_dir /home/linuxbrew/.linuxbrew/opt/php@5.6/bin system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set data_dir /home/linuxbrew/.linuxbrew/share/pear@5.6/data system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set cfg_dir /home/linuxbrew/.linuxbrew/share/pear@5.6/cfg system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set www_dir /home/linuxbrew/.linuxbrew/share/pear@5.6/htdocs system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set man_dir /home/linuxbrew/.linuxbrew/share/man system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set test_dir /home/linuxbrew/.linuxbrew/share/pear@5.6/test system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear config-set php_bin /home/linuxbrew/.linuxbrew/opt/php@5.6/bin/php system ==> /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15/bin/pear update-channels ==> Caveats To enable PHP in Apache add the following to httpd.conf and restart Apache: LoadModule php5_module /home/linuxbrew/.linuxbrew/opt/php@5.6/lib/httpd/modules/libphp5.so <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> Finally, check DirectoryIndex includes index.php DirectoryIndex index.php index.html The php.ini and php-fpm.ini file can be found in: /home/linuxbrew/.linuxbrew/etc/php/5.6/ To start shivammathur/php/php@5.6 now and restart at login: brew services start shivammathur/php/php@5.6 Or, if you don't want/need a background service you can just run: /home/linuxbrew/.linuxbrew/opt/php@5.6/sbin/php-fpm --nodaemonize ==> Summary 🍺 /home/linuxbrew/.linuxbrew/Cellar/php@5.6/5.6.40_15: 485 files, 79MB ==> Running `brew cleanup php@5.6`... Disable this behaviour by setting `HOMEBREW_NO_INSTALL_CLEANUP=1`. Hide these hints with `HOMEBREW_NO_ENV_HINTS=1` (see `man brew`). ``` 配置文件位置: + php.ini:主配置文件 + php-fpm.ini:PHP-FPM 配置文件 ```plaintext /home/linuxbrew/.linuxbrew/etc/php/5.6/ ``` PHP-FPM 启动方式 方式一:后台服务(推荐) + 开机自启、后台运行、适合长期使用 ```bash brew services start shivammathur/php/php@5.6 ``` 方式二:前台运行(调试用) + 前台运行,关闭终端即停止(适合调试或临时使用) ```bash /home/linuxbrew/.linuxbrew/opt/php@5.6/sbin/php-fpm --nodaemonize ``` 快速验证 PHP 是否可用 ```bash # 查看 PHP 版本 /home/linuxbrew/.linuxbrew/opt/php@5.6/bin/php -v # 或者将以下内容添加到终端配置文件后使用 export PATH="/home/linuxbrew/.linuxbrew/opt/php@5.6/bin:$PATH" php -v ``` 建议下一步操作: + 如果只是命令行使用,直接使用 `/home/linuxbrew/.linuxbrew/opt/php@5.6/bin/php -v` 就可以了 + 如果需要 Web 服务器: + 使用 Apahce -> 修改 httpd.conf + 使用 Nginx -> 启动 PHP-FPM 服务 + 添加到 Path(可选) 添加到 Path 使用是没有问题的,但是不方便后续切换 PHP 版本,更好的做法是:[Homebrew 切换 PHP 版本](https://www.itqaq.com/index/365.html) ```bash echo 'export PATH="/home/linuxbrew/.linuxbrew/opt/php@5.6/bin:$PATH"' >> ~/.zshrc source ~/.zshrc ```