php 7.4 中“只读文件缓存模式”指启用 opcache.file_cache_only=1 且 opcache.enable=0,仅通过磁盘文件缓存字节码,不使用共享内存,适用于无 shm 支持环境,性能低于内存模式,需手动清理缓存目录。

PHP 7.4 中配置 OPcache 的“只读文件缓存模式”,实际是指启用 opcache.file_cache_only=1,此时 OPcache 完全跳过共享内存(即不使用 opcache.memory_consumption),仅将预编译的字节码以文件形式写入磁盘指定目录,并在每次请求时从该目录加载——适用于无法使用共享内存的环境(如某些共享主机、容器无 shm 支持、或 PHP-FPM 进程隔离极强的场景)。
确认前提与限制
该模式不是“增强版”,而是降级兼容方案,有明确约束:
- 必须关闭共享内存缓存:
opcache.enable=0(注意:不是1);否则file_cache_only=1会被忽略 - 不支持 JIT 编译(PHP 7.4 本身 JIT 尚未启用,但需知此模式下 JIT 不生效)
- 所有 PHP 进程共用同一份磁盘缓存,无进程间同步机制,依赖文件系统原子性
- 性能低于内存模式(磁盘 I/O 延迟明显),仅用于内存受限或权限受限场景
关键配置项设置
在 php.ini 的 [opcache] 区块中添加或修改以下参数:
-
opcache.enable=0—— 强制禁用内存缓存 -
opcache.file_cache_only=1—— 启用纯文件缓存模式 -
opcache.file_cache="/path/to/your/opcache-cache"—— 指定可写、有足够空间的绝对路径(如/var/www/.opcache),确保 PHP 进程用户(如 www-data)有读写权限 -
opcache.validate_timestamps=1—— 开发/部署阶段建议开启,让 OPcache 在每次请求前检查 PHP 文件是否变更;生产环境若配合自动化发布流程,可设为0,但需手动触发opcache_reset()或清空file_cache目录 -
opcache.max_accelerated_files=20000—— 仍需合理设置,影响哈希表大小,避免冲突导致缓存失效
验证是否生效
配置保存后,必须重启 PHP-FPM(不能 reload):
sudo systemctl restart php7.4-fpm
然后创建一个测试脚本,调用:
<?php var_dump(opcache_get_status()); ?>
观察输出中的 opcache_enabled 应为 false(因 enable=0),但 file_cache 字段应显示你配置的路径,且 file_cache_enabled 为 true。同时检查目标缓存目录下是否生成了时间戳命名的子目录(如 20261015162230)及其中的 .bin 文件。
注意事项与维护
该模式下 OPcache 不自动清理旧缓存目录,长期运行会积累大量时间戳文件夹,易触发 inode 耗尽:
- 务必搭配定时清理脚本(如每日 cron 执行
find /path/to/your/opcache-cache -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;) - 不要将
file_cache设在/tmp等可能被系统自动清理的路径 - 升级 PHP 版本(如升至 8.1)后,必须清空整个
file_cache目录——不同版本字节码不兼容
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











