首页 > 原创文章 > 软件开发 > 查看文章

Thinkphp的的代码为什么改了没效果?删了还执行?

所属分类:软件开发 来源: 丁老师原创 更新时间:2026-01-05 09:42 浏览: 828 IP属地: 深圳

有一个使用ThinkPHP框架开发程序的同学,遇到了这样一个问题,程序的代码明明已经改了,但在执行时还是按照以前的代码逻辑执行的,新修改的没有起到效果,并且他为了测试程序,都已经把这个程序文件删除了,但程序还是能执行,不得已求助于丁老师,这到底是怎么回事呢?

问题复测
1.代码修改了没作用,比如以前的输出结果是1,现在改成了2,但在执行时还是返回1;
2.程序删除了也不行,程序文件删除了,还能执行,甚至把目录删除了,都还能执行;
3.在宝塔中,系统即使停止了,程序依旧在运行,日志依旧在输出(是不是很邪门);

问题分析
1.首先我们检查缓存部分,导致程序修改无效,输出结果始终不变,很多时候是由OPcache引起的,OPcaches会缓存编译后的脚本。我们首先检查服务器php是否安装了OPcache扩展,如果已安装的话就先禁用或者卸载。在停止OPcache后重新测试,问题依旧,看来不是OPcache的问题。
2.检查是否有其他缓存,比如程序是否将脚本写入了runtime的cache中,我们禁用cache,同时清空runtime里的文件,问题依旧。
3.检查服务器是否有安装有其他程序或脚本,在定时的执行系统的某个文件,没有发现。
4.检查服务器运行环境,是使用的宝塔面板,发现安装的有Redis、以及守护进程管理器。

问题解决
1.基本上现在可以明确,除了该系统,服务器并没有其他程序执行,可以排除第三方脚本,问题应该主要在程序自身和运行环境上。
2.打开守护进程管理器发现,有几个进程在运行,如图:

image.png

3.打开进程一看,果然,是指向的thinkphp目录,原因找到了,怪不得修改了程序没反应,这是因为守护进程已经将那几个核心程序,加载到了内存中,系统在运行时读取的,是守护进程加载的程序,并不是系统目录的程序,直接修改系统目录的程序,是没用的,修改后必须重启守护进程的服务才会生效。
4.修改后无效的问题解决了,那么系统即使停止了,程序依旧在运行,是怎么回事呢?我们这个时候看到有Redis,打开Redis,点击进入Redis管理。

image.png

image.png

5.我们发现,在redis中,有一个名为autoload的键,键值就是该系统的那个目录,怪不得系统停了也在执行,原来是这样:守护进程读取redis中的记录,然后根据redis返回的脚本路径,不断的执行。解决方法:手动删除这个redis的键值即可。

全文总结
综上所述,引起系统修改无效的原因主要是因为服务器安装了守护进程,而守护进程管理器会将指定的脚本,加载到内存中,此时你直接修改程序是没用的,这个时候系统读取的是内存中的脚本,每次修改守护进程守护的程序后,都需要重启相关的守护进程才可以生效。

同时,此系统采用了守护进程+Redis缓存的架构,守护进程从Redis中读取相关的脚本路径,然后重复执行。因为某种原因Redis的缓存没有得到释放,因此守护进程就不断的执行该路径的脚本,所以即使系统停止了,程序也一直在运行,这就是问题所在。

Thinkphp是一款很强大的框架,在遇到相关问题时,先检查程序本身,其次是检查运行环境,遵循这个逻辑,基本上都能解决问题。

标签:

相关文章

Java如何在请求中加入参数?

在Java中,提交请求时加入参数有两种方法:一、把参数直接写在url中,如:如请求url是https://www.aaa.com,参数是name=kevin,gender=2,那么可以直接把请求url写成https://www.aaa....

C#开发的Winform程序如何把dll放到...

有同学咨询,使用Visual Studio工具C#开发的Winform程序,生成后软件目录全是大量dll文件,看起来杂乱无章,有没有什么办法能让他统一放到一个文件夹里边呢?丁老师对此问题进行解答。为什么会产生大量的dll文件?因为在使用...

Css3中position:sticky无效...

有同学在前端写css代码时,遇到问题,使用的css3,写的是position:sticky,想要内容滚动到该区域,该区域自动置顶滑动。但一直无效,经过丁老师研究后发现,该区域没有定义高度,而使用position:sticky时,是必须要...

Telegram Mini小程序开发介绍

Telegram Mini小程序基于Javascript开发语言,是集成在Telegram应用内的轻量化网页应用。类似微信小程序,可以直接在Telegram对话或群组中运行而无需单独下载。Telegram小程序支持的应用程序:Teleg...

推荐文章

抖音小程序开发的流程是什么?

开发抖音小程序是一个涉及多个步骤的过程,需要准备相应的资料和工具。以下是开发抖音小程序需要准备的资料和步骤:1. 入驻抖音开发平台:首先,你需要在抖音开放平台注册一个开发者账号,并完成主体认证和对公认证。如果未完成认证,你可以在沙盒工具中创...

Composer self-update 更...

1. composer版本更新文档版本号:https://getcomposer.org/download中文网:https://docs.phpcomposer.com/03-cli.html#self-update英文网:https:/...

Photoshop宽度像素和网页宽度像素不一...

在用photoshop设计时,有的同学会发现,在网页中设置的宽度1000px,截屏后,再用photoshop打开后测量同样图像的宽度时,这个宽度就不是1000像素,而是1200多甚至1300多,是个很奇怪的问题,丁老师检查了photosho...

CI框架页面添加全局变量的方法

CI框架是一款很小却又非常强大的PHP程序框架,非常适合用来搭建中小型网站以及扩展程序。有同学问到,在使用CI框架时,比如要对全站的标题、公司信息、电话等设置一个全局变量,不用每个页面都写死,该怎么办呢?丁老师来教你:1.打开页面的控制器文...

当前在线
免费咨询