最新的PHP8.0想要通过 pecl install swoole 安装swoole 已经不行了,目前只能通过
编译安装
一、 因为目前PHP有多个版本,brew下载多版本PHP如下
bash
#因为现在的brew只支持PHP8.1,所以需要借助 shivammathur 这个第三方扩展
brew tap shivammathur/php #挂载第三方扩展
brew search php #查看PHP版本
brew install shivammathur/php/php@8.0 #下载对应老版PHP
1.1下载好之后即可在 .bash_profile 中管理多个PHP
bash
#php 7.4
#export PATH="$(brew --prefix php@7.4)/bin:$PATH"
#php 8.3
#export PATH="$(brew --prefix php@8.3)/bin:$PATH"
#php 8.0
export PATH="$(brew --prefix php@8.0)/bin:$PATH"
用到哪个解注释即可
二、 下载 swoole 源码
https://github.com/swoole/swoole-src/releases
三选一,我用的 https://pecl.php.net/package/swoole
下载对应版本的swoole,我下载的是 swoole-4.8.12 这个老版本
具体环境
bash
macOS
Homebrew PHP 8.0.30
Swoole 4.8.12
2.1 解压 Swoole 4.8.12
bash
#假设你下载的是 swoole-4.8.12.tar.gz
cd ~/Downloads
tar -zxvf swoole-4.8.12.tar.gz
cd swoole-4.8.12
2.2 用 PHP 8.0 的 phpize 编译
建议直接使用绝对路径,避免系统里存在多个 PHP
bash
#如果你的 Homebrew PHP 8.0 实际路径不同,可以先
brew --prefix php@8.0
#例如返回
/opt/homebrew/opt/php@8.0
#再进行一下命令
#第一步
/opt/homebrew/opt/php@8.0/bin/phpize
#第二部
./configure --with-php-config=/opt/homebrew/opt/php@8.0/bin/php-config
2.3 编译
bash
make -j$(sysctl -n hw.ncpu)
这一步编译的时候可能会出现:
fatal error: 'pcre2.h' file not found只需
bash
#需要先下载 pcre2
brew install pcre2
#PHP版本不同,可以 cd 到 /opt/homebrew/Cellar/ 目录下
#找到下面对应目录的 pcre 文件夹,在 pwd 复制地址替换即可
cp /opt/homebrew/opt/pcre2/include/pcre2.h /opt/homebrew/Cellar/php@8.0/8.0.30_11/include/php/ext/pcre
bash
#编译完成后
make install
正常情况下最后会出现类似
Installing shared extensions: /opt/homebrew/Cellar/php@8.0/8.0.30_...
或者
Installing shared extensions: /opt/homebrew/lib/php/pecl/20200930/
2.4 找到 swoole.so
执行 find /opt/homebrew -name "swoole.so" 2>/dev/null 应该能找到
/opt/homebrew/lib/php/pecl/20200930/swoole.so
或者
/opt/homebrew/Cellar/php@8.0/8.0.30_xxx/pecl/20200930/swoole.so
2.5 给 PHP 加载 Swoole
bash
echo "extension=swoole.so" > /opt/homebrew/etc/php/8.0/conf.d/ext-swoole.ini
#然后
php -m | grep -i swoole
#就能看到
swoole
#说明成功了
#再确认版本
php --ri swoole
#看到
Swoole => enabled
Swoole Extension Version => 4.8.12
扩展:给swoole加上swoole_loader扩展
- PHP 8.0 对应的扩展目录
bash
php -i | grep extension_dir
- 假设得到
extension_dir => /opt/homebrew/lib/php/pecl/20200930
bash
#那么两个文件应该是
/opt/homebrew/lib/php/pecl/20200930/swoole_loader.so
#以及
/opt/homebrew/etc/php/8.0/conf.d/20-swoole-loader.ini
#20-swoole-loader.ini 内容
extension=swoole_loader.so
#然后
php -m
#就可以看到
swoole_loader