自定义的接口代码不会立即生效

这个过程如下:

(1)本机是phpstudy_pro继承环境
(2)采用的是域名访问

在我,curd创建了相关的代码之后,我要给前端添加api接口,这个时候就很奇怪了,我在api有时候修改代码,在apipost调用时,不会立马生效,总要过一会才生效。

这个感觉,有点像我之前写swoole时,每次修改代码后我得重启swoole服务才生效。

ps:我再开发环境下也尝试了,调用后端的接口,比如是:localhost:8000/api/user/index,我此时在接口里修改代码,我得ctrl+C,再执行php think run,代码才会立即生效。

已采纳
jiandan
jiandan
这家伙很懒,什么也没写~
1周前

解决办法:取消opcache扩展即可。
补充一下原因:
OPcache开启后导致代码修改不及时生效的核心原因在于其对PHP代码的缓存机制设计。具体机制如下:

‌字节码预编译机制
OPcache将PHP脚本编译后的字节码存储在共享内存中,避免每次请求重复编译。当代码文件未发生变化时,直接读取缓存中的字节码执行。

‌时间戳验证机制
默认配置下(opcache.validate_timestamps=0),OPcache不会主动监测源码文件的修改时间戳变化。即使修改了代码文件,OPcache仍继续使用缓存的旧字节码执行,导致修改不会立即生效。

‌缓存更新延迟
即使开启时间戳验证(opcache.validate_timestamps=1),默认的opcache.revalidate_freq参数设为2秒,意味着OPcache每隔2秒才检查一次文件变更。这会造成代码修改后仍有短暂延迟才会生效。

复制代码
php.ini 修改
opcache.enable=0               ; 完全禁用OPcache(推荐开发环境)
; 或保留开启时配置
opcache.validate_timestamps=1  ; 开启文件变更监测
opcache.revalidate_freq=0      ; 每次请求都检查文件修改
2个回答默认排序 投票数排序
YANG001
YANG001
这家伙很懒,什么也没写~
2周前

对的,常驻内存运行且没有文件热更新才会存在这样的问题

php think run 并不存在这样的问题,你的情况也并不是不更新,而是更新慢,确实很奇怪,就像是文件系统响应慢一样,这个问题不能复现哈,或许你服务端运行于虚拟机等,同步需要时间?某种请求缓存?

jiandan
jiandan回复YANG001
这家伙很懒,什么也没写~
2周前

就是普通的phpstudy_pro,没有啥别的环境,奇怪的很,我只好重启电脑了,重启电脑解决一切烦恼

jiandan
jiandan回复YANG001
这家伙很懒,什么也没写~
1周前

破案了,开了OPcache扩展,关了就好了

YANG001
YANG001回复jiandan
这家伙很懒,什么也没写~
1周前

恭喜!

jiandan
jiandan
这家伙很懒,什么也没写~
2周前

嗯。。。。。。。。。,最终还是选择开发环境,手动Ctrl+C,停止再用php think run启动来迫使代码立即生效了。

先在这里六个记录,等未来复现了再追评。

请先登录
0
1
0
6