1. 文档Swoole4 文档 - 安装 Swoole -- 很详细
2. 整理输出截图如下: 
环境Linux centOS 7.4 64位 or Mac
or 基于Docker
还是要说一句,推荐在物理机上安装,避免因为Docker文件共享导致的性能延迟
请留意「安装准备」检查顺序: 安装前必须保证系统已经安装了下列软件 4.8 版本需要 php-7.2 或更高版本
5.0 版本需要 php-8.0 或更高版本
「
➜ swoole pwd
/Users/huangbaoyin/Documents/code/php/swoole
➜ swoole php -v
PHP 8.1.9 (cli) (built: Aug 4 2022 14:00:20) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.9, Copyright (c) Zend Technologies
with Zend OPcache v8.1.9, Copyright (c), by Zend Technologies
➜ swoole
」
gcc-4.8 或更高版本
「
➜ swoole gcc -v
Apple clang version 14.0.0 (clang-1400.0.29.102)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
➜ swoole
」
make
「
➜ swoole make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
➜ swoole
」
autoconf
「
➜ swoole autoconf -v
autoconf: error: no input file
➜ swoole
可以看到已经安装
查看 autoconf 信息
➜ swoole brew info autoconf
==> autoconf: stable 2.71 (bottled)
Automatic configure script builder
https://www.gnu.org/software/autoconf
/opt/homebrew/Cellar/autoconf/2.71 (71 files, 3.2MB) *
Poured from bottle on 2022-08-19 at 17:41:00
From: https:///Homebrew/homebrew-core/blob/HEAD/Formula/autoconf.rb
License: GPL-3.0-or-later and (GPL-3.0-or-later with Autoconf-exception-3.0)
==> Dependencies
Required: m4 ✔
==> Analytics
install: 146,925 (30 days), 442,091 (90 days), 1,861,574 (365 days)
install-on-request: 20,966 (30 days), 62,229 (90 days), 281,837 (365 days)
build-error: 0 (30 days)
➜ swoole
」
均以满足条件,如果存在没有满足条件的软件, 使用homebrew进行安装即可,当然也可以编译安装
2.1 Linux -- CentOS通过PECL安装1、替换YUM源 yum -y install epel-release rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 2、php7.2安装 yum -y install php72w 3、安装扩展 yum -y install php72w-cli php72w-fpm php72w-common 安装成功可通过 “php -v ”查看是否安装成功 4、安装pecl
yum -y install php72w-devel
yum -y install php72w-pear

5、安装swoole(确认gcc编译器已安装,如果没有运行 yum install gcc*) 
pecl install swoole 

6、加入PHP扩展 vim /etc/php.ini 最后面添加 extension= 通过 php -m 可查看是否安装成功 一直没出来, swool的扩展, 具体原因TBD 7、安装中出现的问题,解决方案
https://wiki.swoole.com/wiki/page/1013.html
openssl安装:
yum install openssl
yum install openssl-devel
源码编译安装参见Mac下源码安装,几乎完全一样2.2 Mac源码安装官方-安装swoole的第一句话:
Swoole 扩展是按照 PHP 标准扩展构建的。「也常是*nix下源码编译安装的通用步骤」
使用 phpize 来生成编译检测脚本, ./configure 来做编译配置检测,
make 进行编译,
make install 进行安装。
命令如下: 这里安装最新版本「安装稳定版本,换url即可」
首先进入,自己的某个目录「你来决定」 mkdir -p ./build && \
cd ./build && \
mkdir ./tmp && \
rm -rf ./swoole-src && \
curl -o ./tmp/v4.8.12.tar.gz https:///swoole/swoole-src/archive/refs/tags/v4.8.12.tar.gz -L && \
tar zxvf ./tmp/v4.8.12.tar.gz && \
mv swoole-src* swoole-src && \
cd swoole-src && \
phpize && \
./configure \
--enable-openssl \
--enable-http2 && \
make && sudo make install
注意,下面是官方网站上的命令脚本,但是本地安装出现问题 1. 首先 ./tmp文件夹没有创建,导致没办法下载源码压缩文件 2. https:///swoole/swoole-src/archive/master.tar.gz 源码文件中似乎并没有提供 --enable-http2的配置选项 mkdir -p ~/build && \
cd ~/build && \
rm -rf ./swoole-src && \
curl -o ./tmp/swoole.tar.gz https:///swoole/swoole-src/archive/master.tar.gz -L && \
tar zxvf ./tmp/swoole.tar.gz && \
mv swoole-src* swoole-src && \
cd swoole-src && \
phpize && \
./configure \
--enable-openssl \
--enable-http2 && \
make && sudo make install
如果是新手,推荐一步一步来,可以查看每一步的作用和效果 这里会添加注释 mkdir -p ./build // 创建build目录,专门放置源码编译的软件/服务 cd ./build // 进入该目录 mkdir ./tmp // 创建build目录下的临时目录,用于放置临时文件 rm -rf ./swoole-src // 先移除可能存在的目录,只是提前清理 curl -o ./tmp/v4.8.12.tar.gz https:///swoole/swoole-src/archive/refs/tags/v4.8.12.tar.gz -L // 下载源码文件压缩包到tmp目录下,并且重命名为/v4.8.12.tar.gz tar zxvf ./tmp/v4.8.12.tar.gz // 解压源码压缩包 mv swoole-src* swoole-src // 重命名解压后的文件名为swoole-src cd swoole-src // 进入解压后的源码目录 phpize // 生成编译检测脚本「即为了生成configure文件」 

./configure -h // 查看编译配置检测支持的选项列表 
可以看到如下选项,否则会报错,例如:configure: WARNING: unrecognized options: --enable-http2 --enable-openssl Use openssl --enable-http2 Use http2.0 
./configure --enable-openssl --enable-http2// 启用 openssl和http2 配置选项 开始预编译 
... 
make // 开始编译 或者 make -j // 推荐 使用多核进行变异,速度会快一些 「没有参数时,即infinite,使用主机的所有核心数」 make -j 4 // 使用四个核心进行编译 
开始编译,但是出现了报错,如下: 

报错信息:
/Users/huangbaoyin/Documents/env/build/swoole-src/include/swoole_ssl.h:27:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
^~~~~~~~~~~~~~~
make: *** [thirdparty/php/sockets/sockaddr_conv.lo] Error 1
1 error generated.
make: *** [thirdparty/php/curl/interface.lo] Error 1
make: *** [src/network/dns.lo] Error 1
根据报错信息可知:在当前目录下的include下找不到openssl/ssl.h文件 解决办法:让其能找到需要的文件,手动执行该文件路径 需要重新执行预编译阶段,但是执行之前,先要确认信息 查看openssl的位置配置项名 
查看openssl的位置 
重新执行 「直接复制命令,要留意是否还有其他不可见的符号,导致命令失败」 ./configure --enable-openssl --enable-http2 --with-openssl-dir=/opt/homebrew/opt/openssl@3 但是接着又报错:
/opt/homebrew/Cellar/php/8.1.9/include/php/ext/pcre/php_pcre.h:23:10: fatal error: 'pcre2.h' file not found
#include "pcre2.h"
^~~~~~~~~
一样性质的错误: 
/opt/homebrew/Cellar/pcre2/10.40/include
/opt/homebrew/Cellar/php/8.1.9/include/php/ext/pcre

这里安装了pcre, 接下来创建一个软连接即可 ln -s /opt/homebrew/Cellar/pcre2/10.40/include/pcre2.h /opt/homebrew/Cellar/php/8.1.9/include/php/ext/pcre/pcre2.h 
但是依然报了警告「这里就先不处理了,因为编译还是成功了」 
成功编译 🧬 
sudo make install // 安装,如果有root权限,可以删除sudo 
最后,最后,编译安装成功后,修改 php.ini 加入 extension=
或者
extension=swoole
通过 php -m 来查看是否成功加载了 ,如果没有可能是 php.ini 的路径不对。 可以使用 php --ini 来定位到 php.ini 的绝对路径,Loaded Configuration File 一项显示的是加载的 php.ini 文件,如果值为 none 证明根本没加载任何 php.ini 文件,需要自己创建。


Okay,安装成功~
PECL方式
命令有:
pecl install swoole
pecl install -D 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes" enable-cares="yes"' swoole
#或者
pecl install --configureoptions 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes" enable-cares="yes"' swoole
按照上面的指南即可
但是出现了报错,原因和解决办法:TBD「主要见上面的编译安装,原因应就是上面的,已经解决, 后续来使用php7.2来安装再实践」
pecl install https://pecl.php.net/get/swoole-4.8.12.tgz 截图如下: https://pecl.php.net/package/swoole 


2.3 Docker方式一: pecl install swoole

关于是否开启相关支持,可以参考官方推荐 
但是上面都是输入yes,结果安装失败,原因即有些扩展环境中并没有 【需要搞清楚这些支持是做什么用的~】
「先选择no」 第三次安装,统一回车默认no, 

可以看到,install ok, 以及 configuration option "php_ini" is not set to php.ini location
You should add "extensinotallow=" to php.ini
这里新建 docker-php-ext-swoole.ini,并且输入如下内容: extension=

重启php-fpm容器,检测扩展是否安装成功「其实不需要重启,因为swoole是工作cli模式下, 而且swoole不会依赖PHP-FPM,但是依赖PHP,作为其扩展,不过这里PHP-FPM容器则比较特殊,里面包含了PHP,在Nginx+PHP-FPM模式下,就不要安装Swoole了,而是建议使用单独的容器安装PHP+Swoole」
没有重启容器之前,如下: 发现并没有加载swoole扩展,web请求以前端请求脚本phpinfo输出内容为准 以及加载的配置文件的路径,注意有些版本/平台下的PHP会有两个配置文件,
php.ini 和 php.cli 前者用于web,后者用于cli 
尽管cli下,执行php -m可以发现swoole「那就说明已经安装成功」,但是http模式下,并没有生效 

查看配置信息 
重启容器,然后刷新,查看phpinfo的信息「这个不是PHP-FPM,而是PHP本身/解释器的输出内容」 
可以看到安装成功~
扩展冲突
检查:无安装/开启有冲突的扩展 
下一章节:
... |