Mac通过brew安装的PHP8.0,编译安装swoole4

最新的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

https://gitee.com/swoole/swoole/tags

三选一,我用的 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扩展

  1. PHP 8.0 对应的扩展目录
bash 复制代码
php -i | grep extension_dir
  1. 假设得到
    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
相关推荐
2401_8724187829 分钟前
互联网公开信息检索完全指南:Google、Yandex、Wayback Machine、DNS、WHOIS、Shodan 等 OSINT 工具大全
开发语言·php
aixingpan1 小时前
aixingpan.cnAPI开发文档:api_docs_trichart_natal_solar_return_transit2接口指南
前端·php
狗凯之家源码网2 小时前
H5 棋牌对战系统源码深度评测与实战分析
php·游戏开发
李纲明16 小时前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
4SAPI16 小时前
AI 数据分析工具大模型 API 选型指南
大数据·人工智能·架构·php·1024程序员节
f89790707017 小时前
php升级之后切换到php8.2.35报pdo错误
php
4SAPI17 小时前
搭建 AI 数据分析工具大模型 API 选型指南
数据库·人工智能·架构·php·1024程序员节
Regentsoft丽晶软件18 小时前
从 “定时拉取“ 到 “事件驱动“,服装库存实时同步的底层架构怎么设计?
经验分享·php·零售
用户609686242660820 小时前
页面构建器做的页面翻译:短代码、区块、动态内容各自会踩什么坑
php·wordpress
阿文和她的Key20 小时前
PHP2Shell事故四层拆解:AI找洞是小时级,披露协调还是邮件级
网络·人工智能·架构·php