安装方式
pecl install swoole
服务器环境:阿里去ECS CentOS7.6
如果提示没有找到pecl,则先安装pecl
yum install pecl
安装过程中报错:
configure: error: in `/wwwroot/swoole-4.2.5':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
解决方法,安装c++库
yum install glibc-headers
yum install gcc-c++
安装全成后,把swoole.so添加到php.ini中,通过php -m
查看的时候报错
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/swoole.so' - /usr/lib64/php/modules/swoole.so: undefined symbol: mysqlnd_cset_escape_slashes in Unknown on line 0
原因是,swoole.so的加载顺序导致,swoole.so需要在mysqlnd之后加载才不会报这个错,所以需要调整扩展的加载顺序;
解决方法:去除php.ini中的extension=swoole.so;
在/etc/php.d/目录中,可以看到有很多扩展配置文件,并且这个文件名前都有一个序号;
为swoole创建一个配置文件,把序号写得比mysqlnd大,就可以了。
[root@iZwz90dldsesascd7v4Z php.d]# ls
20-bz2.ini 20-dom.ini 20-gd.ini 20-mbstring.ini 20-phar.ini 20-sockets.ini 20-sysvshm.ini 20-xsl.ini 30-pdo_sqlite.ini 40-igbinary.ini 50-mongodb.ini
20-calendar.ini 20-exif.ini 20-gettext.ini 20-mcrypt.ini 20-posix.ini 20-sqlite3.ini 20-tokenizer.ini 20-zip.ini 30-wddx.ini 40-imagick.ini 50-redis.ini
20-ctype.ini 20-fileinfo.ini 20-iconv.ini 20-mysqlnd.ini 20-shmop.ini 20-sysvmsg.ini 20-xml.ini 30-mysqli.ini 30-xmlreader.ini 40-yaml.ini 60-swoole.ini
20-curl.ini 20-ftp.ini 20-json.ini 20-pdo.ini 20-simplexml.ini 20-sysvsem.ini 20-xmlwriter.ini 30-pdo_mysql.ini 40-geoip.ini 50-memcached.ini
swoole.ini的内容
extension=swoole.so
改好后,再试一下php -m
;就可以看到swoole扩展了。
PHP使用的是php71u
swoole在安装过程中,有个选择yes/no的环节:
// 是否启用 Debug 跟踪调试
// 启用后,会在命令行中输出 Debug 跟踪 log,我一般禁用此项。
enable debug/trace log support? [no] : yes
// 是否启用 PHP Sockets 支持
// 如果你需要用 PHP 编写 Sockets 服务,可以启用此项。
enable sockets supports? [no] : yes
// 是否启用 OpenSSL 支持
// 是否启用 SSL 加密,如果你是通过 Swoole 提供对外的 HTTPS 服务,则需要启用此项。
// 我的 Mac 是本地开发用,所以不启用。
enable openssl support? [no] : no
// 是否启用 HTTP2 支持
// 了解 HTTP2 新特性 https://zh.wikipedia.org/wiki/HTTP/2
enable http2 support? [no] : yes
// 是否启用异步 Redis 支持
// Swoole 实现了一套支持异步的 Redis 服务端框架
// https://wiki.swoole.com/wiki/page/p-redis_server.html
enable async-redis support? [no] : yes
// 是否启用 MySQL 原生支持
enable mysqlnd support? [no] : yes
// 是否启用 PgSQL 协程客户端支持
enable postgresql coroutine client support? [no] : yes
注意:如果有些扩展没安装,yes之后后面会报错.
在swoole里我没有启用openssl,启用这个配置需要选设置好证书目录,会稍微麻烦一点,我的https是通过nginx配置的,所以这里暂时可以不用设置openssl。