You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Memcache函数调用异常求助:Call to undefined function memcache_get()

解决Call to undefined function memcache_get()的问题

看起来你踩了PHP memcache相关扩展的一个经典坑——你当前环境安装的是带d的Memcached扩展,但项目代码依赖的是不带d的memcache扩展的函数式API!这俩是完全独立的PHP扩展,API并不兼容。

问题核心拆解

你自己写的测试代码用的是Memcached类的面向对象方法(比如$mem_var->get()),这完全适配你当前装的扩展;但项目里的代码调用的是memcache_get()这类函数,这属于不带d的memcache扩展专属的函数式接口,你当前环境没装这个扩展,所以才会触发“未定义函数”的错误。

两种解决方案

方案1:安装不带d的memcache扩展(推荐,代码改动最小)

因为项目是基于旧扩展编写的,直接安装对应扩展是最省事的方案:

  1. 先纠正下,Ubuntu没有16.03版本,你应该是用的16.04,执行以下命令安装扩展:
sudo apt-get update
sudo apt-get install php-memcache
  1. 重启Lighttpd服务器让扩展生效:
sudo service lighttpd restart
  1. 再次查看phpinfo(),确认出现memcache(不带d)的条目,此时项目里的memcache_get()函数就能正常调用了。

方案2:修改项目代码适配Memcached扩展(需改动代码)

如果你打算统一升级到新的Memcached扩展,可以修改项目中所有memcache相关代码:
比如你提到的这段代码:

public function get($key) { 
    return memcache_get($this->memcache, $key); 
}

改成适配新扩展的面向对象写法:

public function get($key) { 
    return $this->memcache->get($key); 
}

同时还要确保项目中初始化memcache的代码也同步修改——比如原来的new Memcache()或者memcache_connect()要改成new Memcached()并调用addServer()(就像你测试代码里的写法)。这个方案需要改动项目中所有memcache相关逻辑,适合你计划长期维护升级的场景。

额外排查提示

再仔细核对下phpinfo()里的扩展名称:如果显示的是memcached(带d),那就是你当前装的新扩展;只有显示memcache(不带d)才是项目需要的旧扩展,别把名称看混了。

内容的提问来源于stack exchange,提问作者Thread7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:46:05