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

原文地址:https://www.cnblogs.com/phper12580/p/10209200.html

时间: 2024-10-29 19:12:21

swoole安装报错详解 mysqlnd_find_charset_nr in Unknow的相关文章

STL中map容器使用自定义key类型报错详解

引言 STL的map容器中,key的类型是不是随意的呢? 实践 编写测试代码 定义一个结构体来试试: struct a { char* pName; int m_a; }; map<a, int> mp; a a1; a1.m_a = 100; a1.pName = "a1"; a a2; a2.m_a = 200; a2.pName = "a2"; mp.insert(std::make_pair(a1, 1)); mp.insert(std::mak

网站报错详解

问题二:如何查询访问日志? 截取深圳P2P公司--天天赢金融的访问日志来作为案例: #Software:Microsoft Internet Information Services 6.0 #Version:1.0 #Date:2015-12-02 09:00:17 #Fields:date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent)sc-statu

FTP报错详解

110 Restart marker reply. In this case, the text is exact and not left to the particular implementation; it must read: MARK yyyy = mmmm where yyyy is User-process data stream marker, and mmmm server's equivalent marker (note the spaces between marker

DenyHosts 安装及配置详解

http://moo1985.blog.51cto.com/401365/290662 http://www.lllusion.com/?p=437 DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能. 下面进入主题. 1.安装脚本 要求安装服务器能上网,并建立 /workspace目录 ###########################

MySQL5.6 数据库主从同步安装与配置详解(Master/Slave)

MySQL5.6 数据库主从同步安装与配置详解(Master/Slave)本篇文章主要介绍了MySQL5.6 数据库主从同步安装与配置详解,具有一定的参考价值,有兴趣的可以了解一下.安装环境 操作系统 :CentOS 6.5 数据库版本:MySQL 5.6.27 主机A:192.168.1.1 (Master) 主机B:192.168.1.2 (Slave) 这里强调的数据库的版本,是因为MySQL在5.6之前和之后的安装方式是不一样的. 本人在进行配置的时候,也遇到了这个坑,这里提前说明,希望

DirectX 安装报错: 不能信任一个安装所需的压缩文件,请检查加密服务是否启用并且cabinet文件证书是否有效

DirectX 安装报错 不能信任一个安装所需的压缩文件,请检查加密服务是否启用并且cabinet文件证书是否有效 是直播软件open broadcaster software,这个软件安装的时候提示"your system is missing DirectX components that Open Broadcaster Software requires.Would you like to download them?"然后点是,就跳转微软的官方下载页面了. 下载dxwebse

关于Elipse安装报错Unfortunately the Java version needed to run Eclipse Installer couldn&#39;t be found on your system. You need the following version or a higher version问题

问题:本人因为重装了系统导致重新安装Elipse,在安装了当前最新版本JDK(JDK13)后,发现Eclipse安装程序出错,错误如下: 即JDK没有安装或者版本过低,这明显在扯淡,java安装测试如下: JDK和Eclipse均为64位 本人猜测原因: 1.版本不一致,即Eclipse或JDK版本过高 2.重装系统原因 解决方案: 1.直接下载zip(包)文件 解压,即可运行 2.重装系统 注意: 下载Elipse时记得把镜像选为国内的 关于Elipse安装报错Unfortunately th

varnish安装及配置详解

varnish系统架构: varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程). Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程. Child进程包含多种类型的线程,常见的如:Acceptor线程:接收新的连接

MSSQL 2012安装报错之0x858C001B

之前安装 Microsoft Sql Server 2012 R2 的时候总是报这样的错误: SQL Server Setup has encountered the following error: The SQL Server license agreement cannot be located for the selected edition, enterprise. This could be a result of corrupted media or the edition bei