swoole安装报错详解 mysqlnd_find_charset_nr in Unknow
今天安装 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
3、重新启动 php-fpm
最新文章
- String... 用法
- time.c 的Java实现(从timestamp计算年月日时分秒等数值)
- HDU3870 Catch the Theves(平面图最小割转最短路)
- delphi 常用的将窗口置前的函数
- 【Python】django模型models的外键关联使用
- C++11多元组类别
- 转:说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
- android studio2.0 搭建Robotium环境--有被测源代码的情况下
- codeforces 464C. Substitutes in Number
- Xamarin 后台持续定位与提示
- Python框架之Django学习
- readSerializableObj
- varnish学习以及CDN的原理
- laravel 常见问题
- LR 场景选项配置--笔记
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(七)一次线上Mysql数据库崩溃事故的记录
- 利用JavaCSV API来读写csv文件
- Android在代码中获取应用签名
- 用好这6个APP,学英语SO EASY!
- Ubuntu VMware出现提示No 3D support is available的解决方法
热门文章
- 最小的VIM操作指南
- Timer定时函数的用法
- 详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化
- C#使用windows服务定时调用api接口
- Leetcode:Regular Expression Matching分析和实现
- 【总结整理】pv、uv
- 张超超OC基础回顾01_类的创建,申明属性,以及本质
- 238. Product of Array Except Self 由非己元素形成的数组
- 如何学习MySQL
- Smarty3——复合变量修饰器输