swool 安装 使用 pecl 安装 官方文档垃圾

一、安装PECL

//php版本 > 7  7以下版本忽略

$ wget http://pear.php.net/go-pear.phar

$ php go-pear.phar

//php版本 < 7

$ yum install php-pear//否则会报错PHP Parse error:  syntax error, unexpected //'new' (T_NEW) in /usr/share/pear/PEAR/Frontend.php on //line 91

二、安装swool

$ sudo pecl  install swoole

查看是否安装成功 php -m | grep swoole

 

会碰到各种错  本人碰到的扩展 一个都不能 少   一个个安装

使用yum安装gcc:yum install gcc             使用:which gcc 查看是否安装成功

使用yum安装g++:yum install gcc-c++     使用:which g++  查看是否安装成功

使用yum安装gdb:yum install gdb             使用:which gdb  查看是否安装成功

yum install openssl   yum install openssl-devel

nghttp2 扩展

wget https://github.com/nghttp2/nghttp2/releases/download/v1.34.0/nghttp2-1.34.0.tar.gz

tar zxvf nghttp2-1.34.0.tar.gz

cd nghttp2-1.34.0

./configure

make && make install

安装 mysqlnd要和自己的PHP版本对应

yum install php70w-mysqlnd.x86_64 

完了要重启 systemctl restart mysqld

三、错误三

php.ini加了扩展  

php -m 查看 或phpinfo() 查看没有

检测swoole执行       php --ri swoole

发现报错如下:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/swoole.so' - /usr/lib64/php/modules/swoole.so: undefined symbol: mysqlnd_find_charset_nr in Unknown on line 0

        仔细看报错发现这条报错是由swoole.so报出来的,说明在加载swoole.so的时候报的找不到 mysqlnd_find_charset_nr ,这是一个以 mysqlnd 打头的一个关键字,而 mysqlnd 又是 PHP 的一个扩展,通过阅读 swoole/swoole.mysql.c 的源码我们发现有如下一段:


const MYSQLND_CHARSET* cset = mysqlnd_find_charset_nr(client->connector.character_set);
 
if (cset == NULL)
{
 
    swoole_php_fatal_error(E_ERROR, "unknown mysql charset[%s].", client->connector.character_set);
 
    RETURN_FALSE;
 
}


从上面的源码我们可以看出,原来 swoole 是需要依赖 msyqlnd 这个扩展的,我们发现 phpinfo() 里面 msyqlnd 扩展是存在的为什么还会报这个错呢。

  最后发现 PHP默认加载的扩展都在 /usr/lib64/php/modules/ 这个目录里在,这里面的 .so 文件是默认加载的,关于这些扩展的配置不是在 /etc/php.ini 中,而是在 /etc/php.d/ 这个目录中,这个目录当中的所有的 .ini 文件是在 /etc/php.ini 加载完成后再加载的,而我们的 extension=swoole.so 的配置是写在 /etc/php.ini 的文件末尾,所以是先加载了 swoole.so 然后再加载 mysqlnd.so,这就导致了 swoole 找不到 mysqlnd_find_charset_nr 。

 

解决方法:
1、将/etc/php.d/ 目录中的mysqlnd.ini文件删除

2、在 /etc/php.ini 的 extension=swoole.so 上面一行添加 extension=mysqlnd.so

3、重新启动 php-fpm 

这样可以解决问题了,同样可能还会遇到以下报错:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/swoole.so' - /usr/lib64/php/modules/swoole.so: undefined symbol: php_sockets_le_socket in Unknown on line 0

解决的方法也是类似的:

1、将/etc/php.d/ 目录中的sockets.ini文件删除

2、在 /etc/php.ini 的 extension=swoole.so 上面一行添加 extension=sockets.so

最终顺序 

​​​​​​​extension=mysqlnd.so
extension=sockets.so
extension=swoole.so

3、重新启动 php-fpm          systemctl restart  php-fpm.service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值