安装问题
在phpinfo中有在php -m中没有
先确认CLI模式下是否有,命令行输入php --ri swoole
如果输出了Swoole的扩展信息就说明你安装成功了!
99.999%的人在此步成功就可以直接使用swoole了
不需要管php -m
或者phpinfo
网页打印出来是否有swoole
因为Swoole是运行在cli模式下的,在传统的fpm模式下功能十分有限
fpm模式下任何异步/协程等主要功能都不可以使用,99.999%的人都不能在fpm模式下得到想要的东西,却纠结为什么fpm模式下没有扩展信息
先确定你是否真正理解了Swoole的运行模式,再继续追究安装信息问题!
原因
编译安装完Swoole后,在php-fpm/apache
的phpinfo
页面中有,在命令行的php -m
中没有,原因可能是cli/php-fpm/apache
使用不同的php.ini配置
解决办法
- 确认php.ini的位置
在cli
命令行下执行php -i | grep php.ini
或者php --ini
找到php.ini的绝对路径
php-fpm/apache
则是查看phpinfo
页面找到php.ini的绝对路径
- 查看对应php.ini是否有
extension=swoole.so
cat /path/to/php.ini | grep swoole.so
pcre.h: No such file or directory
编译Swoole扩展出现
fatal error: pcre.h: No such file or directory
原因是缺少pcre,需要安装libpcre
ubuntu/debian
sudo apt-get install libpcre3 libpcre3-dev
centos/redhat
sudo yum install pcre-devel
其他Linux
到PCRE官方网站下载源码包,编译安装pcre
库。
安装好PCRE
库后需要重新编译安装swoole
,然后使用php --ri swoole
查看swoole
扩展相关信息中是否有pcre => enabled
'__builtin_saddl_overflow' was not declared in this scope
error: '__builtin_saddl_overflow' was not declared in this scope
if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
note: in definition of macro 'UNEXPECTED'
# define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
这是一个已知的问题。问题是CentOS上的默认gcc缺少必需的定义,即使在升级gcc之后,PECL也会找到旧的编译器。
要安装驱动程序,必须首先通过安装devtoolset集合来升级gcc,如下所示:
sudo yum install centos-release-scl
sudo yum install devtoolset-7
scl enable devtoolset-7 bash
fatal error: 'openssl/ssl.h' file not found
请在编译时增加--with-openssl-dir参数指定 openssl 库的路径
!> 使用pecl安装Swoole时,如果要开启openssl也可以增加--with-openssl-dir参数,如:enable openssl support? [no] : yes --with-openssl-dir=/usr/include/openssl
make或make install无法执行或编译错误
NOTICE: PHP message: PHP Warning: PHP Startup: swoole: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20121212
These options need to match
in Unknown on line 0
PHP版本和编译时使用的phpize
和php-config
不对应,需要使用绝对路径来进行编译,以及使用绝对路径来执行PHP。
/usr/local/php-5.4.17/bin/phpize
./configure --with-php-config=/usr/local/php-5.4.17/bin/php-config
/usr/local/php-5.4.17/bin/php server.php