记录几个安装swoole过程中遇到的问题

安装方式

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。