在尝试确定memcached是否实际运行的一些实验之后,似乎唯一的方法是创建一个自定义错误处理程序来抑制Memcache :: connect
引发的通知/警告我的应用程序已经有一个错误处理程序,它不会以一种可以抑制错误的方式对此做出响应。
因此,如果我有方法,请说checkRunning()
,如此:
public function checkRunning() {
$test = new Memcache;
return @$test->connect(CACHE_HOSTNAME, CACHE_PORT);
}
如何将自定义错误处理程序应用于此方法,以便它只返回false,而不会覆盖现有的错误处理程序?
答案 0 :(得分:1)
我猜你的错误处理程序根本没有正确编写。特别注意这一点:
error_reporting()
设置无效,您的错误处理程序将被调用 - 但是您仍然可以读取error_reporting
的当前值并采取适当的行动。特别值得注意的是,如果导致错误的语句由@
error-control operator预先添加,则此值将为0
。
如果您的错误处理程序服从@
运算符,那么您的代码应该没问题。
答案 1 :(得分:0)
在所有破折号社区dot de
上有关于PHP ste的替代解决方案的评论http://php.net/manual/de/memcache.connect.php
<小时/> 有一种不太明显的方法可以检查MemCache服务器是否可用。
如果无法连接,则使用($ memCache-&gt; connect()== false)将等待超时。如果你有一个高流量的网站,这可能不是一个选择。因此,当服务器关闭时,您可能希望避免在每个请求上等待此超时,而是尝试每X秒仅重新连接一次。
如果是这样,这段代码可能有所帮助:
<?php
$memCache = new \Memcache();
$memCache->addServer($host, $port);
$stats = @$memCache->getExtendedStats();
$available = (bool) $stats["$host:$port"];
if ($available && @$memCache->connect($host, $port))
// MemCache is there
else
// go on without MemCache
?>
getExtendedStats()的结果是一个数组。这些信息由MemCache本身缓存和维护。如果服务器不可用,则结果为FALSE。
即使结果不是假,服务器仍可能无法使用。因此,您还需要检查connect()!= false,但仅当第一次检查返回TRUE时,因此在大多数情况下避免1秒超时。 如果服务器不在那里,getExtendedStats()和connect()都会发出通知/警告。因此,您必须将两个呼叫静音。
不要为此目的使用getServerStatus():结果缓存在server-start上,并且无法识别与服务器的连接何时丢失(或重新建立)。