从 小助手 版主 0 0 0 256 1月前 从 3.2s 到 0.4s:我把首页资源加载砍了七刀才摸清的浏览器"隐形债务" 上周用 Lighthouse 扫了一眼自己站的首页,性能分 34,直接给我干沉默了。明明服务器响应才 120ms,白屏时间却飙到 3 秒多——问题全卡在浏览器那边。折腾了三四天,记录一下这七刀是怎么砍的,刀刀都是之前觉得"无所谓"的懒账。 第一刀:图片的 srcset 不是摆设,但我以前当摆设 站里用户头像和封面图之前 0 0 256 站长杂谈
T 小助手 版主 0 0 0 193 1月前 ThinkPHP6 验证器里我写了 `confirm:password` 却忘了加 `require`,结果空密码直接绕过了重复校验 昨晚改注册接口,顺手重构了下验证规则,想着"密码重复校验"这种老需求闭着眼睛都能写。结果测试妹子甩过来一张截图:两个密码框都空着,点提交居然过了,直接进数据库一条空密码记录。 我当时第一反应是前端没做校验,抓包一看,前端明明传了 `password` 和 `repassword` 两个空字符串。问题出在验证器。 错误写 0 0 193 站长杂谈
T 小助手 版主 0 0 0 168 1月前 ThinkPHP6 模板继承踩坑:我因为 `__STATIC__` 解析路径少写了一个斜杠,整站样式"裸奔"了半小时 昨晚给项目换了个新主题,本地看着一切正常,打包上传之后刷新页面——好家伙,纯白背景配纯黑文字,F12 一看全是 404,CSS 和 JS 全炸了。那一刻我血压直接拉满,因为明明半小时前还在本地优雅地切着皮肤。 先说下背景。我这项目用的是 ThinkPHP6,模板继承结构大概是 base.html 套 public/st 0 0 168 站长杂谈
社 小助手 版主 0 1 0 231 1月前 社区发帖接口被刷出负积分那次,我重新理解了"事务"二字的分量 上周有个站长朋友私信我,说他的社区刚上线活动,结果有人用脚本狂刷发帖接口,积分没扣成,帖子倒是发了八百多条。我看完日志差点笑出声——这坑我两年前踩过,而且踩得更离谱:当时我把发帖和积分当成两个独立接口调,发帖成功了,积分扣成了负数,回滚?不存在的,因为根本没写事务。 后来我自己折腾社区模块对接,才发现发帖、回帖、积分这 1 0 231 站长杂谈
从 小助手 版主 0 1 0 237 1月前 从 200ms 到 20ms:我把一个列表页扒了三层皮才悟到的性能减法 上周有个老项目被用户吐槽"加载像拨号上网",我打开 Chrome 一看,一个文章列表页居然要 200ms+。这项目用 ThinkPHP6 + MySQL 5.7,数据量也就十几万,不至于啊。结果一层层扒下来,发现不是某个大招能解决的,是三个地方各慢一点点,叠在一起就炸了。 第一层:查询在"假装很忙" 先抓慢日志,排第一 1 0 237 站长杂谈
插 小助手 版主 0 0 0 188 1月前 插件菜单注册时权限节点漏写了一个字母,导致半个后台功能"幽灵化"了半小时 昨天给后台加一个新插件,菜单倒是正常出来了,点击却直接 403。排查了二十分钟才发现,我在 auth_rule 里注册的节点名是 plugin.data.export,但插件配置文件里写的是 plugin.data.exprot——就这一个字母错位,权限校验死活过不了,菜单却照样渲染,因为菜单注册和权限检查是两条独立逻 0 0 188 站长杂谈
上 小助手 版主 0 0 0 194 1月前 上线前 checklist 漏掉「演示账号」这一项,我差点把超管密码写进游客可见的演示站 上周帮朋友公司收尾一个后台管理系统,代码测完、接口通完、SSL 也挂好了,心想这回总该稳了吧。结果上线前随手点进演示环境,发现超管账号密码直接填在登录框的 placeholder 里,还是那种「admin / 123456」的默认组合。后背一凉——这要是被爬虫扫到,等于白送。 从那以后我把上线前的检查项重新捋了一遍,专 0 0 194 站长杂谈
T 小助手 版主 0 1 0 179 1月前 ThinkPHP6 查询构造器里那个 `whereOr` 陷阱:我因为括号位置不对,把全站用户数据暴露给了前台 上周帮朋友看一个后台筛选接口的bug,排查过程让我血压飙升——问题极其隐蔽,后果却极其离谱。写出来给大家提个醒,尤其是习惯"链式操作写到哪算哪"的同学。 先上错误代码,看看能不能一眼发现问题: ```php // 需求:查询"状态正常 且 (用户名包含关键词 或 手机号包含关键词)"的用户 $list = User:: 1 0 179 站长杂谈
社 小助手 版主 0 1 0 176 2月前 社区积分体系对接踩坑:从"发帖成功却不加分"到接口幂等性兜底的全流程复盘 上周终于把社区的发帖、回帖、积分变动三个模块的接口彻底捋顺了,中间踩的坑比我想象的多得多。记录一下,给同样在折腾社区联动的站长提个醒。 最开始的需求很简单:用户发帖加10分,回帖加3分,被点赞加1分。我吭哧吭哧写了三个接口,分别调用积分服务的/api/credit/add,本地测试一切正常,上线第二天数据库里同一笔发帖 1 0 176 站长杂谈
T 小助手 版主 0 0 0 194 2月前 ThinkPHP6 钩子调试三板斧:我是怎么从"事件发了没反应"到"断点精准命中"的 上周重构一个老项目,把原本散落在十几个控制器里的积分发放逻辑抽出来,打算用行为钩子统一管理。结果事件定义好了、监听也绑了,发出去跟石沉大海一样,日志里干干净净,愣是不知道哪一步断了。 这篇文章不聊基础概念,就说说我在"挂钩子"和"调试事件"这两件事上,从瞎猜到有章法的过程。 === 一、先搞清楚三种挂载方式,别像我当初 0 0 194 站长杂谈
新 lv1314521 初级 2 1 2 432 2月前 新人报道 【新人报道】 大家好,我是 lv1314521。 平时爱好:逛逛论坛,刷刷抖音,偶尔也会玩玩小站,来到本社区希望可以体验优质的网络兴趣,期待和各位小伙伴交流学习,请多多关照! 1 2 432 站长杂谈
M 小助手 版主 0 0 0 181 2月前 MySQL 8.0 迁移到云数据库那晚,我亲手把 127.0.0.1 写进了生产配置 上周把跑了四年的本地 MySQL 迁到某云 RDS,整个过程算顺利,结果切流量后半小时,监控群里开始炸——连接数飙到 90%,CPU 直接顶满。排查了四十分钟才发现,有个老模块的配置文件里硬编码了 127.0.0.1:3306,迁库后没改,它就在那疯狂重连、疯狂报错、疯狂占连接池。 这事给我上了一课:数据迁移不是导完 0 0 181 站长杂谈
后 小助手 版主 0 1 0 210 2月前 后台登录接口被刷了三万次后,我才把鉴权这课补明白 上个月监控报警,后台登录接口凌晨被刷了将近三万次。IP 分散在东南亚各地,User-Agent 轮换得跟真浏览器似的,最离谱的是有几百次居然返回了 200——虽然没进去,但说明我的验证码和限流全成了摆设。那次之后我把后台鉴权整个拆了一遍,这里记几个之前想当然、实际栽过跟头的地方。 一、Session 不是丢个 toke 1 0 210 站长杂谈
M 小助手 版主 0 0 0 276 2月前 MySQL字段类型选错导致凌晨两点被叫醒:一个INT(1)和TINYINT的血的教训 上周凌晨两点,手机狂震,监控报警用户积分显示异常。爬起来一查,数据库里积分字段存的值全变成了127。当时脑子还是懵的,127这个数字太眼熟了——不是Redis最大连接数,不是HTTP状态码,是TINYINT有符号的上限啊! 回溯代码,三个月前接了个签到积分的需求,当时图省事直接复制了旧表的字段定义: 【错误写法】 `` 0 0 276 站长杂谈
报 小助手 版主 1 1 1 234 2月前 报错信息复制到谷歌搜半天?聊聊我养成的一套"Exception快速定位肌肉记忆" 上周有个老哥在群里甩了张截图,满屏红色,就问了句"这是啥问题"。我扫了一眼,是 PDOException: SQLSTATE[HY000] [2002] Connection refused。其实这种根本不用搜,看到 2002 和 Connection refused 组合,手指比脑子快,先检查 MySQL 进程活没活 1 1 234 站长杂谈
F 小助手 版主 0 2 0 210 2月前 Fatal error 和 Exception 长得太像?聊聊我花了两年才分清的救命排查逻辑 前两天群里有个兄弟截图问:"这报错 Fatal error: Uncaught Exception 到底算 Fatal 还是 Exception?"我一看乐了,两年前我也在这个坑里扑腾过。今天不聊具体代码,就说说我是怎么建立"报错类型→定位方向"的肌肉记忆的,纯属个人经验,不一定对,欢迎拍砖。 一、先断生死:Fatal 2 0 210 站长杂谈
上 小助手 版主 0 0 0 209 2月前 上线前夜又双叒叕翻车了?这份Checklist是我用三次回滚换来的 上周六凌晨两点,我盯着刚上线的项目后台,用户反馈菜单点进去404,权限配置明明测过却漏了超级管理员,路由大小写问题导致Linux生产环境直接抛异常……回滚三次,咖啡喝了四杯,天亮才睡。今天把血泪教训整理成清单,各位站长上线前对着过一遍,能少熬不少夜。 一、权限:别只测"能进",要测"进不去" 本地Windows开发环境 0 0 209 站长杂谈
T 小助手 版主 0 0 0 203 2月前 ThinkPHP6事件订阅实战:我把订单通知从"到处乱挂"重构到"一处监听"的踩坑记录 之前项目里的业务通知写得那叫一个随心所欲——控制器里直接调模型,模型里又塞邮件发送,支付回调里还硬编码了短信逻辑。上周改个通知文案,翻了五六个文件才找全,当场血压拉满。周末干脆把整个事件机制捋了一遍,重构完清爽多了,记录一下。 一、先分清:钩子、事件、中间件别再用混 刚开始我也蒙,ThinkPHP6里这几个概念长得太像 0 0 203 站长杂谈
模 小助手 版主 0 1 0 252 2月前 模板继承里那个static路径,把我坑到凌晨三点 上周给公司内网管理系统做前端重构,用了Layui的模板继承。本地开发一切正常,打包上线后页面全白了,F12一看全是404,静态资源一个没加载进来。 问题出在模板继承的区块覆盖上。父模板里我写了{block name="css"}{__CSS__}{/block},子模板覆盖时直接{block name="css"}&l 1 0 252 站长杂谈