1

我的网站托管在 webfaction 上并运行 php5.4

我正在尝试启动并运行 memcached,但遇到了一个非常奇怪的错误

非常感谢任何帮助,托管公司正在与我一起努力解决这个问题,但是......请参见下文

以下代码有效

error_reporting(E_ALL & ~E_NOTICE);

$mc = new Memcached();
$mc->addServer('localhost', 32323);
echo "Setting foo to Hello! <Br />";
$mc->set("foo", "Hello!");
echo "Setting bar to Memcached.. <Br />";
$mc->set("bar", "Memcached...");

echo "dumping values <br />";
$arr = array(
$mc->get("foo"),
$mc->get("bar")
);
var_dump($arr);

但以下不

error_reporting(E_ALL & ~E_NOTICE);

$mc = new Memcached();
$mc->addServer('localhost', 32323);

$mc->get("cat");

它实际上抛出了这个错误

500 – Internal Server Error
The page you requested is currently unavailable. Please try again later.

If you are the website owner, please see Error: 500 Internal Server Error documentation for more information and possible steps to resolve the problem.

以下是我尝试过的一些事情要记住

  • 是的,它是 memcacheD 而不是 memcache

  • 我已经创建了隔离环境来测试它,但在所有情况下,如果我在设置它之前请求该值,我什至无法尝试/捕获任何错误(不会传播那么高)。几乎没有达到PHP级别

从我的 PHP 错误日志中我得到

[Sat Feb 02 19:55:33 2013] [error] [client 209.29.54.55] Premature end of script headers: php54.cgi
4

1 回答 1

0

所以这是我从虚拟主机得到的答案,以防其他人遇到同样的问题

好的,我们终于确定了问题所在:

php53 -c 。index.php
php53 之前:符号查找错误:~/php53-exts/memcached.so:未定义符号:memcached_last_error_errno

具体来说,发生的事情是您针对 libmemcached 1.0.15 构建了 memcached,但我们的服务器已经安装了旧版本的 libmemcached,版本 0.31。

较新版本的 libmemcached 是必需的;memcached 2.1.0 不会针对旧的 libmemcached 构建。但是当您的 PHP 实际 运行时,它会尝试链接到共享的 libmemcached,而不是您安装到 ~/lib 中的那个

好的,可以针对 libmemcached 静态重建 PHP memcached PECL 模块,但是它也需要针对相同的 libmemcached 构建 memcached 本身。然后,当您在 PHP 代码中执行“new Memcached()”时,您必须确保您的 PHP 调用了适当的 ~/bin/memcached。

这工作量太大了,所以我正在考虑在我们所有的服务器上升级 memcached 和 libmemcached 的版本。较新的 memcached + libmemcached 将允许安装新版本的 memcached PHP PECL 模块,而无需本地安装 libmemcached 和二进制文件的静态链接。

于 2013-02-03T15:12:17.847 回答