需用绝对路径加载php_opcache.dll并确认配置文件正确:zend_extension="C:\phpenv\php\8.1.22\ext\php_opcache.dll",启用opcache.enable=1,检查php --ini定位真实php.ini,重启对应Web服务或重开phpEnv托盘程序。

phpEnv里找不到opcache.so或php_opcache.dll怎么办
phpEnv是Windows下常见的PHP一键环境,但它的目录结构和扩展路径不像宝塔或WAMP那样直观。很多用户编辑php.ini时直接写zend_extension=opcache.so,结果PHP启动失败——因为Windows下必须用.dll,且路径要绝对。
先确认你的phpEnv安装路径(比如C:\phpenv\php\8.1.22),然后检查ext子目录是否存在php_opcache.dll。如果没找到,说明该PHP版本未内置OPcache(极少见,但旧版phpEnv打包可能漏掉),需手动补全:
- 去windows.php.net下载对应VC版本、线程安全(TS)的PHP二进制包,解压后复制
php_opcache.dll到你的php\ext\目录 - 在
php.ini中写完整路径:zend_extension="C:\phpenv\php\8.1.22\ext\php_opcache.dll"(注意引号和反斜杠) - 别漏掉
opcache.enable=1,否则扩展加载了也不生效
修改php.ini后phpinfo()仍不显示Opcache模块
常见原因是phpEnv同时存在多个php.ini:一个给Apache用,一个给CLI用,而你改的是错的那个。运行php --ini命令,看输出里“Loaded Configuration File”指向哪——这才是实际生效的配置文件。
另一个坑是phpEnv默认启用php.ini-development而非php.ini-production,后者才默认开启OPcache相关配置。建议:
立即学习“PHP免费学习笔记(深入)”;
- 把
php.ini-development重命名为php.ini(确保它是唯一被加载的) - 搜索
[opcache]区块,若无则手动添加整段配置,不要只加单行 - 检查是否有重复的
zend_extension行(比如既有opcache又有xdebug),顺序错或冲突会导致扩展静默失效
opcache.validate_timestamps=0在phpEnv开发环境下是否安全
安全,但代价明确:代码改了不会自动生效,必须手动清缓存。phpEnv多用于本地开发调试,频繁改代码+不刷新页面看到旧结果,是新手最常卡住的点。
推荐折中方案:
- 开发时设
opcache.validate_timestamps=1+opcache.revalidate_freq=2(每2秒检查一次),牺牲极小性能换即时反馈 - 避免设为0,除非你已习惯每次改完代码就执行
php -r "opcache_reset();" -
opcache.enable_cli=1可以开,方便用命令行跑测试时也走缓存,但注意部分框架(如Laravel)的Artisan命令会因缓存导致类加载异常,这时临时关它
重启phpEnv服务后Opcache仍不工作
phpEnv本身不管理Web服务进程,它只是PHP解释器的封装。你改完php.ini后,必须重启依赖PHP的上层服务:
- 如果你用Apache:在phpEnv界面点“Restart Apache”,或进
services里重启Apache2.4服务 - 如果你用Nginx + PHP-FPM:重启
php-fpm服务(phpEnv通常把它注册为Windows服务,叫类似PHP-FPM-8.1的名字) - 验证方式别只看
phpinfo()页面有没有Opcache标题栏——执行php -r "var_dump(opcache_get_status()['opcache_enabled']);",返回bool(true)才算真启用
最易忽略的一点:phpEnv的GUI界面有时会缓存旧的PHP进程,即使你点了重启,背后PHP-CGI可能还在用老配置。关掉整个phpEnv托盘程序,再重新启动,比单纯点“Restart”更可靠。



















