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分钟收到一次上述错误消息。当然,我查了一下,连接到cron的PHP会话清理脚本以30分钟的间隔运行。
我一直在寻找,但无法找到任何具体的解决方案。
我的设置:
我发现上述问题的最接近的是:http://community.rtcamp.com/t/php-warning-error-php-msgpack-serialize/6262但该线程没有答案。
答案 0 :(得分:8)
首先,您需要确定正在加载哪些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
答案 1 :(得分:1)
我想你可以从网站here上的类似主题获得帮助。
但简单地说,你的一个扩展是加载内存缓存,其中的路径不正确。 你应该在你的php.ini中找到它并手动修复路径。
答案 2 :(得分:1)
这意味着在你的一个php配置文件(php.ini或其他接近它)中有一个扩展名= ...或zend_extension = ...行试图加载该扩展名:ixed.5.2。林
不幸的是,文件或路径不存在或权限不正确。
尝试搜索PHP加载的.ini文件(phpinfo()可以指示哪些文件) - 其中一个应该尝试加载该扩展名。 更正文件的路径或注释掉相应的行。
答案 3 :(得分:1)
检查是否安装并启用了msgpack扩展(php -i | grep msgpack
)。
似乎Ubuntu中的PHP是用by default编译的。
如果已安装并启用,请检查memcached扩展名。也许您正在使用以前的安装或类似的东西。
答案 4 :(得分:1)
tl; dr:我最终必须从我的服务器手动清除所有小于php7.0的PHP,以及相关的cron作业。
长篇故事:
通过我的运行过程(ps -aux | grep 'php'
),我意识到php5仍在运行。我服务器上的所有内容都使用PHP7,因此延迟进程是多余的,此外还有一个cron作业在php5某处运行会话清理作业,使用脚本查找所谓的缺失Memcached文件。
通过apt
从系统中删除所有小于php7的phps后,我还删除了/usr/lib/php5
和/usr/lib/php/
中所有小于php7的现有文件夹在/etc/cron.d/php5
和/或/etc/cron.d/php/
不再有关于memcache的PHP会话清理的抱怨警告
答案 5 :(得分:0)
我在使用memcache.so时遇到类似的错误,并且我注意到系统运行“ pecl install memcache”后即安装了新版本的memcache(自动更新为最新版本)。新版本导致了该错误,因此我不得不将版本1的版本降低为pecl install memcache-4.0.5.2,它才有效。感谢@Farkie的真知灼见,那时我才意识到几天前刚发布了一个新版本,就是这样!