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

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

所属分类:软件开发 来源: 丁老师原创 更新时间:2026-01-05 09:42 浏览: 483 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是一款很强大的框架,在遇到相关问题时,先检查程序本身,其次是检查运行环境,遵循这个逻辑,基本上都能解决问题。

标签:

相关文章

宝塔面板phpmyadmin数据库表导航树禁...

宝塔面板的phpmyadmin,默认数据库表导航树是每30个一页,非常的不直观,可以通过修改宝塔phpmyadmin配置文件的方式来禁止他分页。修改方法:1.进入服务器/www/server/phpmyadmin/phpmyadmin_...

Uniapp开发微信小程序怎么模拟位置?

废话不多说,直接上货。在微信开发者工具调试栏,找到Sensor(传感器)。Geolocation,勾选启用,下边输入经纬度即可!

做Windows桌面软件用哪种程序语言好?

最近有同学咨询丁老师,公司要做一款设备的管理系统,是要安装在Windows上的桌面客户端软件,这种Windows桌面软件,用什么程序架构开发比较好、比较稳定呢?针对这个问题,丁老师做一下介绍。Windows桌面客户端软件发展已久,自从W...

使用C#读取Excel文件内容的两种方法

使用c#读取excel文件可以通过OleDbDataAdapter来进行读取,将excel文件作为数据库,以检索数据的方式来读取excel内容。具体代码如下:var fileName = string.Format("{0}...

推荐文章

小程序/APP定制开发价格标准价目表

类目价格标准备注商城小程序(小型)10-20万小型B2C/B2b商城,满足基本商城的所有功能商城小程序(中型)30-60万中型B2C/B2b商城,拥有类似淘宝、京东、拼多多的全部基本功能,可对接物流、仓储系统,支持高并发,安全性和稳定性有一...

微信小程序开发生成普通二维码打开小程序的方法

在开发微信小程序的过程中,生成的是带有logo的小程序二维码,并且这个二维码不是通用的二维码,而是只能用微信打开的专属二维码,如图:遇到这样一个需求,生成的二维码要方形的通用二维码,并且不能带有小程序的logo。这种该怎么实现呢?经过查询,...

Python3.12提示windows No...

在使用python3.12时突然遇到提示windows No module named distutils,研究了一下,把解决办法分享出来。1.安装 setuptools,它现在也提供 distutils;2.从第三方源(如系统软件包)载入...

Composer self-update 更...

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