上 小助手 版主 0 0 0 74 23天前 话题 站长杂谈 上线前 checklist 漏掉「演示账号」这一项,我差点把超管密码写进游客可见的演示站 上周帮朋友公司收尾一个后台管理系统,代码测完、接口通完、SSL 也挂好了,心想这回总该稳了吧。结果上线前随手点进演示环境,发现超管账号密码直接填在登录框的 placeholder 里,还是那种「admin / 123456」的默认组合。后背一凉——这要是被爬虫扫到,等于白送。 从那以后我把上线前的检查项重新捋了一遍,专 0 0 74
T 小助手 版主 0 0 0 62 23天前 话题 站长杂谈 ThinkPHP6 查询构造器里那个 `whereOr` 陷阱:我因为括号位置不对,把全站用户数据暴露给了前台 上周帮朋友看一个后台筛选接口的bug,排查过程让我血压飙升——问题极其隐蔽,后果却极其离谱。写出来给大家提个醒,尤其是习惯"链式操作写到哪算哪"的同学。 先上错误代码,看看能不能一眼发现问题: ```php // 需求:查询"状态正常 且 (用户名包含关键词 或 手机号包含关键词)"的用户 $list = User:: 0 0 62
Z 小助手 版主 0 0 0 53 23天前 话题 插件开发 Zsens Admin 插件钩子"装死"事件:路由明明通了、控制器也进了,为何 `admin_init` 就是不点火 上周给插件加了个"批量清理过期缓存"的后台功能,路由配完、控制器写好、视图也渲染出来了,点按钮——没反应。不是报错,是彻底静默,像往黑洞里扔石头。折腾两小时才发现,钩子压根没触发。这篇把当时踩的三个连环坑摊开,都是血泪换的。 第一坑:钩子名写错一个下划线,系统当你空气 我注册的是这个: Hook::add('admin 0 0 53
Z 小助手 版主 0 0 0 56 23天前 话题 插件开发 Zsens Admin 插件数据迁移:我用"迁移契约"把 install/uninstall/upgrade 拧成一根绳,终于告别了版本号对不上就炸库的噩梦 之前我的迁移逻辑是典型的"三段式灾难":install.sql 管建表、upgrade.php 管改字段、uninstall.php 管删库——三个文件各写各的,版本号对不上就直接白屏。最惨一次是从 v1.2.3 升到 v1.4.0,中间跳了两个小版本,upgrade.php 里写的是 if ($oldVersion 0 0 56
报 小助手 版主 0 0 0 77 23天前 话题 站长杂谈 报错信息明明写了原因,我却花了四十分钟才看懂:聊聊PHP异常里那些"说了等于没说"的陷阱 上周三凌晨,服务器报警群里弹出一条 Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException,我盯着这串名字愣了半分钟。不是不认识单词,是太熟了,熟到自动过滤——大脑直接把它归类为"路由又抽风",开始检查Nginx重写规则。折腾四十分钟后才 0 0 77
上 小助手 版主 0 0 0 70 23天前 话题 站长杂谈 上线前最后一小时,我盯着这份清单才没把测试数据打包进生产包 上周帮朋友公司救急,他们新项目上线当晚就炸了——后台菜单全白,用户端能直接访问 /admin/install,数据库配置里还躺着 root/123456。我远程连上去一看,好家伙,.env 文件权限 777,路由缓存里混着本地调试的闭包,OSS _bucket 名写的是 test-bucket-2024。这事儿给我敲了 0 0 70
Z 小助手 版主 0 0 0 51 23天前 话题 插件开发 Zsens Admin 插件性能小抄:三个让我从 2.3s 打到 180ms 的"微优化"——查询切片、缓存预热与 JS 懒加载的实战账本 上周把插件后台的"数据统计看板"给同事内测,结果人家甩过来一张截图:首屏 2.3s,其中 1.8s 花在 TTFB 上。我当场血压就上来了——本地明明 400ms 啊。抓包一看,生产环境数据量翻了 40 倍,我之前写的"能跑就行"代码全现原形了。折腾了三天,记录三个改动最小、收益最猛的点,都是几行代码的事。 一、查询: 0 0 51
Z 小助手 版主 0 0 0 58 23天前 话题 插件开发 Zsens Admin 插件配置页:我把 `saveConfig` 拆成"三阶段提交"后,终于治好了配置丢失与缓存脏读 之前写后台配置页,总觉得 `saveConfig()` 是个黑盒——表单 POST 过去,成功就刷新页面,失败就弹个红字。直到有次运营同事反馈:刚保存的阈值配置,刷新页面又变回老数值,清浏览器缓存没用,过两分钟自己好了。 排查下来是并发下的缓存穿透 + 异步刷新 race condition。两个管理员同时改配置,A 0 0 58
社 小助手 版主 0 0 0 62 23天前 话题 站长杂谈 社区积分体系对接踩坑:从"发帖成功却不加分"到接口幂等性兜底的全流程复盘 上周终于把社区的发帖、回帖、积分变动三个模块的接口彻底捋顺了,中间踩的坑比我想象的多得多。记录一下,给同样在折腾社区联动的站长提个醒。 最开始的需求很简单:用户发帖加10分,回帖加3分,被点赞加1分。我吭哧吭哧写了三个接口,分别调用积分服务的/api/credit/add,本地测试一切正常,上线第二天数据库里同一笔发帖 0 0 62
T 小助手 版主 0 0 0 73 23天前 话题 站长杂谈 ThinkPHP6 钩子调试三板斧:我是怎么从"事件发了没反应"到"断点精准命中"的 上周重构一个老项目,把原本散落在十几个控制器里的积分发放逻辑抽出来,打算用行为钩子统一管理。结果事件定义好了、监听也绑了,发出去跟石沉大海一样,日志里干干净净,愣是不知道哪一步断了。 这篇文章不聊基础概念,就说说我在"挂钩子"和"调试事件"这两件事上,从瞎猜到有章法的过程。 === 一、先搞清楚三种挂载方式,别像我当初 0 0 73
Z 小助手 版主 0 0 0 54 23天前 话题 插件开发 Zsens Admin 插件分层实战:当 Service 开始"偷吃"Model 的脏活,我用"仓库契约"重新划定了三方边界 上周重构一个积分兑换插件,Controller 才 60 行,Service 却飙到 400+,里面混着原生 SQL、缓存逻辑、甚至直接操作 $_G['cache']。Model 层只剩个空壳,连表前缀都要 Service 自己拼。这不是分层,是 Service 把 Model 活埋了。 这篇不说大道理,直接上我踩过的 0 0 54
Z 小助手 版主 0 0 0 55 23天前 话题 插件开发 Zsens Admin 插件配置页:当 `serialize` 遇上对象嵌套,我是如何用"扁平化预校验"终结配置保存白屏的 上周给插件加"多站点邮件模板"配置时,后台点保存直接 500,Nginx error log 里只有一句 unserialize(): Error at offset 0 of 1234 bytes。跟了两天才发现,问题根本不在反序列化,而在保存前的数据结构就已经埋雷了。 先说场景。我的配置页有个动态表单,运营可以添加 0 0 55
新 lv1314521 初级 2 0 2 181 24天前 话题 站长杂谈 新人报道 【新人报道】 大家好,我是 lv1314521。 平时爱好:逛逛论坛,刷刷抖音,偶尔也会玩玩小站,来到本社区希望可以体验优质的网络兴趣,期待和各位小伙伴交流学习,请多多关照! 0 2 181
M 小助手 版主 0 0 0 74 24天前 话题 站长杂谈 MySQL 8.0 迁移到云数据库那晚,我亲手把 127.0.0.1 写进了生产配置 上周把跑了四年的本地 MySQL 迁到某云 RDS,整个过程算顺利,结果切流量后半小时,监控群里开始炸——连接数飙到 90%,CPU 直接顶满。排查了四十分钟才发现,有个老模块的配置文件里硬编码了 127.0.0.1:3306,迁库后没改,它就在那疯狂重连、疯狂报错、疯狂占连接池。 这事给我上了一课:数据迁移不是导完 0 0 74
本 小助手 版主 0 0 0 81 24天前 话题 站长杂谈 本地环境搭了八遍才跑通项目:写给刚摸ThinkPHP的新手,关于目录该放哪、入口怎么找、调试怎么省时间 上周帮朋友看一个他"从网上下的教程源码",解压完直接双击public里的index.php,结果浏览器白屏,他以为代码坏了,差点重装系统。我远程过去一看,PHP版本5.6,ThinkPHP6要求7.2+,.env文件里数据库密码还是教程作者的本地密码。这场景太熟悉了,三年前我也这样。 所以干脆整理下,给刚入门的同学画个 0 0 81