thinkphp 5 支持 xcache 和 wincache,但需严格匹配环境:xcache 仅限 linux/apache 或 cli 且 php ≤7.3,type 必须为 'xcache';wincache 仅限 windows/iis+fastcgi,type 必须为 'wincache';二者均不报错、静默失效,须用 phpinfo() 和对应函数验证。

ThinkPHP 5 对 xcache 和 wincache 的支持是原生内置的,但实际配置和启用需满足特定前提条件——它们都依赖 PHP 扩展本身已正确安装并启用,且仅适用于特定运行环境。TP5 不会自动检测或兜底,配置错误时静默失效,不会报错也不会写日志,这是最容易被忽略的关键点。
确认扩展是否就绪
在使用前必须验证 PHP 环境是否真正加载了对应扩展:
-
xcache:仅支持 Linux + Apache(mod_php)或 CLI 模式;需确认
phpinfo()中存在 XCache 区块,且extension=xcache.so已写入php.ini;PHP 7.4+ 已基本不兼容,TP5.1 在 PHP 8.x 下无法使用 xcache -
wincache:仅 Windows IIS + PHP FastCGI 环境可用;需确认
wincache.dll已启用,且phpinfo()显示 WinCache 模块状态为 enabled;不支持 Apache 或 Nginx + PHP-FPM 组合
配置文件写法(config/cache.php)
两者均采用标准驱动配置格式,无需额外连接逻辑。以下为最小可行配置示例:
-
xcache 配置:
return [ 'type' => 'Xcache', 'prefix' => 'tp5_', 'expire' => 3600, ];注意:'type'必须严格写成'Xcache'(首字母大写),小写'xcache'会导致驱动未识别,回退为空实现 -
wincache 配置:
return [ 'type' => 'Wincache', 'prefix' => 'tp5_', 'expire' => 1800, ];同样,'type'必须为'Wincache';wincache 默认使用共享内存,不支持自定义路径或 host/port 参数
验证是否生效的实操方法
不能只看 Cache::set() 是否返回 true,要确认底层真实写入:
- 对 xcache:在命令行执行
php -r "print_r(xcache_info());",检查cached_entries数量是否递增 - 对 wincache:访问
http://your-site/wincache.php(需手动部署官方监控页)或调用wincache_ucache_info()查看用户缓存条目 - 统一验证方式:在控制器中写
Cache::set('test_key', 'ok', 60); var_dump(Cache::get('test_key'));
若输出bool(false),说明驱动未激活或配置无效
常见失败原因与绕过建议
多数“配置了却不生效”的问题源于环境不匹配:
- 在 Docker、Nginx + PHP-FPM、Mac/Linux Nginx 环境下硬配 xcache/wincache → 必然失败,应改用
File或Redis - 开发机是 Windows WAMP 但用了 Apache → wincache 不工作(因 Apache 不走 FastCGI),应切换为 IIS Express 或改用 Redis
- PHP 版本 > 7.3 仍尝试用 xcache → 建议直接放弃,xcache 自 2017 年起已停止维护,TP5.1 官方文档也已移除相关说明
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











