PHP memcached - php_msgpack_serialize在第0行未知

5

最近升级了PHP,在更新时遇到以下错误信息:

php_msgpack_serialize in Unknown on line 0

首先,我从未听说过这个包。所有关于此包的搜索都指向一个PECL仓库(这真的没有任何意义),而且社区中几乎没有提及。

再进行几次搜索后,我找到了php-memcached-dev的仓库,这是我从未见过或听说过的仓库。

当然,我确实听说过实际的memcached库仓库:libmemcached

我试图在centos的任何地方寻找此模块,但似乎找不到任何好的/可靠的结果。

我搜索了以下地方以寻找此软件包和/或存储库的任何迹象:

我不想在这里显得偏执,但我现在甚至不确定这是否合法。

耸肩 - 我不知道。但我会把我的服务器关掉,直到我看到其他的东西。有人有什么建议/意见吗?

对于一些多疑的人(是的,我也有点这样),这里有一个丑陋的谷歌搜索: php_msgpack后门(注意:只有3个搜索结果。检查第3个中的日期。我自己没有点击它,也不建议其他人点击)。这似乎是一个rkhunter搜索,寻找上面报告的同一文件。可能只是巧合,但谁知道呢。无论如何,我还是想把它推出去。

更新:长话短说,这实际上是一个与Cent安装的PHP版本有关的问题。已经通过最新版本进行修复。

6个回答

8
在Ubuntu 16.04上使用来自Ondrej-PPA的PHP 5.5(https://launchpad.net/~ondrej/+archive/ubuntu/php),我可以通过安装php-msgpack软件包来解决问题:
sudo apt-get install php-msgpack
然后使用以下命令启用php-msgpack:
sudo phpenmod msgpack
如果您将其与PHP一起使用,则可能需要在此之后重新启动apache2。
然后,这个错误就消失了:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20121212/memcached.so' - /usr/lib/php/20121212/memcached.so: undefined symbol: php_msgpack_serialize in Unknown on line 0

天啊,这个可行了。请解释一下为什么它能工作?! - Iofacture
由于缺失的文件是随此库一起提供的。 - Bernhard Zürn
对我来说这似乎是不真实的(但在我的经验中,这在PHP中非常普遍),他们会发布一个包(memcached),却没有包含外部依赖项。发布一个库却不包含其运行所需的所有必要文件似乎是一种糟糕的做法。不,这不仅仅是看起来像是糟糕的做法,它确实是糟糕的做法。 - Iofacture
我在MAMP(pro)上也遇到了同样的问题,只需启用msgpack.so扩展即可解决。 - Maarten Hartman

4

还有最后一件要检查的事情: 在加载memcached之前必须加载msgpack扩展。

在我的场景中,扩展是按字母顺序加载的,因此在加载memcached之前已经加载了msgpack。直到我在memcached之前加载了msgpack,Php cli才能正常工作。


和我一样。我不得不修改/etc/php/<version>/mods-available/msgpack.ini中的内容:将priority=20改为priority=15。然后执行phpdismod msgpackphpenmod msgpack - undefined

2

2
如果您因升级而遇到错误并使用存储库ppa:ondrej/php,请在2020年10月之后来到此处,您需要安装特定版本的msgpack,因为突然间memcached正在寻找这个共享对象。
我们正在从此存储库运行php 7.3,尽管已安装了php-msgpack,但我们需要安装php7.3-msgpack(直到此次升级之前不需要)。无需像接受的答案中提到的那样“启用”它。只需重新启动php即可。
两个步骤:
sudo apt install php7.3-msgpack
sudo systemctl restart php7.3-fpm.service

0

很酷 - 我只是想知道这是否是CentOS中已知的软件包,以满足我的好奇心。msgpack一直在php.ini中吗?我以前从未注意到过它。 - Jonathon Hibbard

0
长话短说,这个问题是由于CentOS安装的PHP版本引起的。最新版本已经修复了这个问题。

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