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> 很抱歉这么晚才回复。您可以按照解释 linkhere
在 /usr/lib/php/modules 的地址为 Unix/Linux 更改模块。以上是关于PHP 启动:无法加载动态库 php_msgpack_serialize的主要内容,如果未能解决你的问题,请参考以下文章