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

PHP Startup: Unable to load dynamic library php_msgpack_serialize

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 会话清理脚本以 30 分钟的间隔附加到 运行 的 cron。

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

我的设置:

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

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

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

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

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

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

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

Ubuntu中的PHP好像是用它编译的by default

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

首先您需要确定正在加载哪些 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

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

长话短说:

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

通过apt从系统中删除所有小于php7的php后,我还删除了[=12中所有小于php7的现有文件夹=] 和或 /usr/lib/php/ 以及在 /etc/cron.d/php5 和或 /etc/cron.d/php/

中找到的与 cron 相关的工作

关于内存缓存的 PHP 会话清理不再发出抱怨警告

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

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

apt install php-msgpack

您可能还缺少 igbinary 扩展名:

apt install php-igbinary