以下是在 **macOS** 上通过源码编译安装 **PHP 8.1** 并包含常用扩展的完整步骤指南,涵盖依赖安装、配置优化、扩展支持及服务管理。
---
### **一、环境准备**
#### 1. 安装 Xcode 命令行工具
```bash
xcode-select --install
```
#### 2. 安装 Homebrew 并更新
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew update
```
#### 3. 安装编译依赖库
```bash
brew install autoconf pkg-config libxml2 openssl@3 zlib libpng libjpeg freetype libzip curl libicu imagemagick sqlite
```
---
### **二、下载 PHP 8.1 源码**
#### 1. 访问 PHP 官网下载源码
```bash
curl -O https://www.php.net/distributions/php-8.1.28.tar.gz
tar xzf php-8.1.28.tar.gz
cd php-8.1.28
```
---
### **三、配置编译选项**
#### 1. 基础配置
```bash
./configure \
--prefix=/usr/local/php8.1 \
--with-config-file-path=/usr/local/php8.1/etc \
--enable-mbstring \
--enable-bcmath \
--enable-pcntl \
--enable-sockets \
--enable-exif \
--enable-fpm \
--with-fpm-user=_www \
--with-fpm-group=_www
```
#### 2. 数据库扩展
```bash
--with-pdo-mysql=mysqlnd \
--with-pdo-pgsql=$(brew --prefix libpq) \
--with-pdo-sqlite=$(brew --prefix sqlite)
```
#### 3. 图形处理(GD 库)
```bash
--enable-gd \
--with-freetype=$(brew --prefix freetype) \
--with-jpeg=$(brew --prefix libjpeg) \
--with-png=$(brew --prefix libpng) \
--with-webp=$(brew --prefix webp)
```
#### 4. 网络与协议
```bash
--with-curl=$(brew --prefix curl) \
--with-openssl=$(brew --prefix openssl@3) \
--with-zlib=$(brew --prefix zlib) \
--enable-soap \
--with-xsl \
--with-ftp
```
#### 5. 其他扩展
```bash
--with-gettext \
--enable-intl \
--with-iconv=$(brew --prefix libiconv) \
--with-zip \
--with-pear
```
#### 6. 完整配置命令
```bash
./configure \
--prefix=/usr/local/php8.1 \
--with-config-file-path=/usr/local/php8.1/etc \
--enable-mbstring \
--enable-bcmath \
--enable-pcntl \
--enable-sockets \
--enable-exif \
--enable-fpm \
--with-fpm-user=_www \
--with-fpm-group=_www \
--with-pdo-mysql=mysqlnd \
--with-pdo-pgsql=$(brew --prefix libpq) \
--with-pdo-sqlite=$(brew --prefix sqlite) \
--enable-gd \
--with-freetype=$(brew --prefix freetype) \
--with-jpeg=$(brew --prefix libjpeg) \
--with-png=$(brew --prefix libpng) \
--with-webp=$(brew --prefix webp) \
--with-curl=$(brew --prefix curl) \
--with-openssl=$(brew --prefix openssl@3) \
--with-zlib=$(brew --prefix zlib) \
--enable-soap \
--with-xsl \
--with-ftp \
--with-gettext \
--enable-intl \
--with-iconv=$(brew --prefix libiconv) \
--with-zip \
--with-pear
```
---
### **四、编译与安装**
```bash
make clean
make -j$(sysctl -n hw.ncpu) # 使用所有 CPU 核心加速编译
sudo make install
```
---
### **五、配置 PHP 环境**
#### 1. 复制配置文件
```bash
sudo cp php.ini-production /usr/local/php8.1/etc/php.ini
```
#### 2. 配置 PHP-FPM
```bash
sudo cp /usr/local/php8.1/etc/php-fpm.conf.default /usr/local/php8.1/etc/php-fpm.conf
sudo cp /usr/local/php8.1/etc/php-fpm.d/www.conf.default /usr/local/php8.1/etc/php-fpm.d/www.conf
```
#### 3. 编辑 `www.conf`
```ini
; 修改监听方式(推荐 Unix Socket)
listen = /usr/local/php8.1/var/run/php-fpm.sock
user = _www
group = _www
listen.owner = _www
listen.group = _www
```
#### 4. 创建日志和运行目录
```bash
sudo mkdir -p /usr/local/php8.1/var/{log,run}
sudo chown -R _www:_www /usr/local/php8.1/var
```
---
### **六、启动 PHP-FPM**
#### 1. 直接启动(调试模式)
```bash
sudo /usr/local/php8.1/sbin/php-fpm --fpm-config /usr/local/php8.1/etc/php-fpm.conf
```
#### 2. 后台启动
```bash
sudo /usr/local/php8.1/sbin/php-fpm -D
```
#### 3. 配置开机自启(launchd)
```bash
sudo nano /Library/LaunchDaemons/org.php-fpm.plist
```
输入以下内容:
```xml
```
加载服务:
```bash
sudo launchctl load -w /Library/LaunchDaemons/org.php-fpm.plist
```
---
### **七、验证安装**
#### 1. 检查 PHP 版本
```bash
/usr/local/php8.1/bin/php -v
```
#### 2. 查看已启用扩展
```bash
/usr/local/php8.1/bin/php -m | grep -E 'pdo|gd|curl|zip|intl|soap'
```
#### 3. 测试 PHP-FPM
```bash
ps aux | grep php-fpm
curl http://localhost/info.php # 需配置 Web 服务器
```
---
### **八、集成到 Web 服务器(Nginx 示例)**
#### 1. 修改 Nginx 站点配置
```nginx
location ~ \.php$ {
fastcgi_pass unix:/usr/local/php8.1/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
```
#### 2. 重启 Nginx
```bash
sudo brew services restart nginx
```
---
### **九、可选:通过 PECL 安装扩展**
#### 1. 安装 Redis 扩展
```bash
sudo pecl install redis
echo "extension=redis.so" >> /usr/local/php8.1/etc/php.ini
```
#### 2. 安装 Imagick 扩展
```bash
sudo pecl install imagick
echo "extension=imagick.so" >> /usr/local/php8.1/etc/php.ini
```
---
### **十、常见问题解决**
#### 1. 扩展未加载
- **检查路径**:`php -i | grep "extension_dir"`
- **确保扩展配置**:`php.ini` 中添加 `extension=模块名.so`
#### 2. 权限问题
```bash
sudo chown -R _www:_www /usr/local/php8.1/var/run/php-fpm.sock
```
#### 3. 编译错误
- **依赖缺失**:通过 `brew install 包名` 补全依赖
- **路径指定**:确保 `--with-xxx=$(brew --prefix xxx)` 格式正确
---
### **总结**
通过此指南,您已完成了:
1. 源码编译安装 PHP 8.1 及常用扩展
2. 配置 PHP-FPM 并集成到 Web 服务器
3. 可选扩展增强及问题排查
后续可通过 `php.ini` 调整配置,或通过 PECL 安装更多扩展。