PHP启动时出错:无法加载动态库php_msgpack_serialize。

6
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 Server LTS 16.04。我最接近以上问题的是这个链接http://community.rtcamp.com/t/php-warning-error-php-msgpack-serialize/6262,但该主题没有答案。
7个回答

13

首先你需要确定加载了哪些PHP ini文件。你可以通过命令行运行php --ini来查看。从技术上讲,apache/nginx可能会运行不同版本的PHP,如果你想查看另一个版本,可以使用phpinfo(); exit();测试脚本进行查找。由于你正在使用cron,因此你无论如何都将使用命令行版本。

在这些文件中的其中一个文件中,你会找到一行类似于:

extension="memcache.so"
如果你完全不需要这个扩展程序,那么只需在其前面添加一个分号进行注释:
;extension="memcache.so"

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

pecl install memcache

安装过程中可能需要跟随一些指示。完成后,您应该能够运行php -v,并且不应该输出相同的警告。如果此方法有效,并且您只看到 PHP 版本,则应重新启动 nginx(如果需要在网站上使用它,则命令行版本应立即生效)。

sudo service nginx restart

我意识到引发错误的并不是我的服务器正在使用的nginx。将它们全部删除后,现在感到心情舒畅了。谢谢。 - KhoPhi
对于Apache服务器,输入以下命令“sudo service apache2 restart”(不包括引号)将会在最后重新启动服务器。 - Bahman.A

1

我猜你可以在这个网站上的类似主题这里获得帮助。

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


我正在努力寻找调用mecached的确切扩展名。 - KhoPhi
非常抱歉回复晚了。您可以按照此处的说明链接,在Unix/Linux的地址/usr/lib/php/modules更改模块。 - Raham

1
这意味着你的php配置文件(php.ini或其他类似文件)中有一个extension=...或zend_extension=...行,试图加载名为ixed.5.2.lin的扩展。不幸的是,该文件或路径不存在或权限不正确。尝试搜索被PHP加载的.ini文件(phpinfo()可以指示哪些文件被加载)-其中之一应该尝试加载该扩展。要么更正文件路径,要么注释掉相应的行。

1

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

似乎Ubuntu中的PHP是默认编译了它

如果已经安装并启用,请检查您的memcached扩展。可能您正在使用先前安装或类似的东西。


我看到已安装了Msgpack。 - KhoPhi

1

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

长话短说:

通过查看我的运行进程(ps -aux | grep 'php'),我意识到php5仍然在其中运行。我的服务器上的所有内容都使用PHP7,所以这个残留的进程是多余的,此外还有一个cron作业在某个地方运行一个会话清理任务,该任务使用一个脚本来寻找所谓缺失的Memcached文件。

在通过apt删除所有低于php7的php之后,我还进入/usr/lib/php5/usr/lib/php/中删除了所有低于php7的现有文件夹,以及它们在/etc/cron.d/php5/etc/cron.d/php/中找到的与cron相关的作业。

PHP会话清理不再发出关于memcache的抱怨警告。


0

我在使用memcache.so时遇到了类似的错误,我注意到当系统运行'pecl install memcache'时会安装一个新版本的memcache(自动更新到最新版本)。新版本导致了这个错误,所以我不得不将版本降低到1个版本,使用pecl install memcache-4.0.5.2,然后它就可以工作了。感谢@Farkie提供的见解,那时我意识到几天前刚刚发布了一个新版本,问题就出在那里!


0

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

apt install php-msgpack

你可能还缺少 igbinary 扩展:

apt install php-igbinary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接