 1. 文档
Swoole4 文档 - 安装 Swoole -- 很详细
https://blog.csdn.net/william_n/article/details/127522690
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://github.com/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=swoole.so 通过 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://github.com/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://github.com/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://github.com/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://github.com/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=swoole.so
或者
extension=swoole
通过 php -m 来查看是否成功加载了 swoole.so ,如果没有可能是 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来安装再实践」
安装不同版本的swoole
pecl 安装指定版本php扩展 (swoole)_Yaso12的博客-CSDN博客
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 "extension=swoole.so" to php.ini 这里新建 docker-php-ext-swoole.ini,并且输入如下内容:
extension=swoole.so
 重启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本身/解释器的输出内容」  可以看到安装成功~ 扩展冲突

检查:无安装/开启有冲突的扩展

下一章节: https://blog.csdn.net/william_n/article/details/127522690 ... |