PHP 启动:无法加载动态库 php_msgpack_serialize

Posted

技术标签:

【中文标题】PHP 启动:无法加载动态库 php_msgpack_serialize【英文标题】:PHP Startup: Unable to load dynamic library php_msgpack_serialize 【发布时间】:2016-11-27 12:55:18 【问题描述】:
php Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20131226/memcached.so' - /usr/lib/php/20131226/memcached.so: undefined symbol: php_msgpack_serialize in Unknown on line 0

今天早些时候,我启用了将消息转发到我的服务器上的 root@localhost 以发送回我的个人电子邮件。

从那以后,我每隔 30 分钟就会收到一次上述错误消息。当然,我查了一下,有一个 PHP 会话清理脚本附加到 cron 以 30 分钟间隔运行。

我一直在寻找,但找不到任何具体的解决方案。

我的设置:

memcached 1.4.25 PHP 7.0 nginx/1.10.0 mysql Ver 14.14 Distrib 5.7.13 Ubuntu 服务器 LTS 16.04

我发现与上述问题最接近的是:http://community.rtcamp.com/t/php-warning-error-php-msgpack-serialize/6262 但该线程上没有答案。

【问题讨论】:

【参考方案1】:

只需安装msgpack 扩展程序,错误消息就会消失:

apt install php-msgpack

您可能还缺少igbinary 分机:

apt install php-igbinary

【讨论】:

【参考方案2】:

我在使用 memcache.so 时遇到了类似的错误,我注意到系统运行“pecl install memcache”时安装了新版本的 memcache(自动更新到最新版本)。新版本导致了该错误,因此我不得不将版本 1 版本更改为 pecl install memcache-4.0.5.2 并且它有效。感谢@Farkie 的洞察力,那时我才意识到几天前刚刚发布了一个新版本,就是这样!

【讨论】:

【参考方案3】:

tl;dr:我最终不得不手动从我的服务器中清除所有低于 php7.0 的 PHP,以及它们相关的 cron 作业。

长篇大论:

通过我的运行过程 (ps -aux | grep 'php'),我意识到 php5 仍在运行。我的服务器上的所有东西都使用 PHP7,所以挥之不去的过程是多余的,另外还有一个 cron 作业在 php5 的某个地方运行会话清理作业,使用一个脚本来寻找所谓的丢失的 Memcached 文件。

通过apt从系统中删除所有小于php7的php后,我还删除了/usr/lib/php5和/或/usr/lib/php/中所有小于php7的现有文件夹以及找到的与cron相关的工作在/etc/cron.d/php5 和或/etc/cron.d/php/

不再有来自 PHP 会话清理关于内存缓存的抱怨警告

【讨论】:

【参考方案4】:

首先,您需要确定正在加载哪些 PHP ini 文件。您可以从命令行运行php --ini。从技术上讲,apache/nginx 可以运行不同的版本,如果您想查看那个版本,可以使用phpinfo(); exit(); 测试脚本进行查找。当您使用 cron 时,无论如何您都在使用命令行版本。

在其中一个文件中,您会发现类似于以下内容的一行:

extension="memcache.so"

如果您根本不需要这个扩展,那么只需在它前面加上一个 ; 将其注释掉:

;extension="memcache.so"

如果您确实需要扩展,那么听起来您需要重建此模块。最简单的方法是使用 PECL。

pecl install memcache

您可能需要在运行安装时遵循一些说明。完成后,您应该能够运行 php -v 并且它不应该输出相同的警告。如果这有效并且您只看到了 php 版本,您应该重新启动 nginx(如果您在网站上需要它,命令行应该立即工作)。 :

sudo service nginx restart

【讨论】:

我意识到触发错误的原因甚至不是我的服务器与 nginx 一起使用的原因。都删了,现在放心了。谢谢 对于 Apache:“sudo service apache2 restart”,不带引号,最后会重启服务器【参考方案5】:

检查是否安装并启用了 msgpack 扩展 (php -i | grep msgpack)。

看来Ubuntu中的PHP是用它编译的by default。

如果已安装并启用,请检查您的 memcached 扩展。也许您正在使用以前的安装或类似的东西。

【讨论】:

我看到安装了 msgpack。【参考方案6】:

这意味着在您的一个 php 配置文件(php.ini 或其他接近它的文件)中有一个 extension=... 或 zend_extension=... 行正在尝试加载该扩展名:ixed.5.2。林

很遗憾,该文件或路径不存在或权限不正确。

尝试在 PHP 加载的 .ini 文件中进行搜索(phpinfo() 可以指示哪些是) - 其中一个应该尝试加载该扩展名。 更正文件的路径或注释掉相应的行。

【讨论】:

【参考方案7】:

我想你可以从 here 网站上的类似主题中获得帮助。

但简而言之,您的一个扩展正在加载 memcache,而其中的路径不正确。 您应该在 php.ini 中找到它并手动修复路径。

【讨论】:

并找到调用 mecached 的确切扩展名是我努力寻找的。​​span> 很抱歉这么晚才回复。您可以按照解释 link here 在 /usr/lib/php/modules 的地址为 Unix/Linux 更改模块。

以上是关于PHP 启动:无法加载动态库 php_msgpack_serialize的主要内容,如果未能解决你的问题,请参考以下文章

PHP 警告:PHP 启动:无法加载动态库 'bz2'

PHP 启动:无法加载动态库 'sqlsrv'

PHP启动:无法加载动态库

PHP 启动:无法加载动态库`curl.so` Ubuntu

PHP 警告:PHP 启动:无法加载动态库

PHP 警告:PHP 启动:无法加载动态库