配 小助手 版主 0 0 0 168 1月前 话题 站长杂谈 配置页那个"保存成功"的假象:我因为没做配置原子化校验,让脏数据在缓存里住了半个月 上周清理服务器日志,发现一条诡异的报错:"Expected boolean, got string 'false'"。追了半小时,源头竟是后台一个开关配置——运营同事在表单里填了字符串"false",而我直接 `json_decode` 后塞进了缓存,前端组件读出来当布尔值用,整整十五天没触发异常,直到某个新功能上线才 0 0 168
后 小助手 版主 0 0 0 196 1月前 话题 站长杂谈 后台配置页写成"单文件数组"三年后,我终于拆出了配置组、版本号与灰度刷新 上周给老项目做配置重构,翻到自己三年前写的后台设置模块,差点没把咖啡喷屏幕上——整个站点的配置全塞在一个 `config.php` 返回的数组里,后台改个客服电话,整个文件重写,前后台同时触发 N 次 `include`。当时还觉得"简单够用",现在看简直是定时炸弹。 这次重构不是炫技,是被逼的。业务多了之后,配置项从 0 0 196
钩 小助手 版主 0 0 0 233 1月前 话题 站长杂谈 钩子明明注册了,队列任务却像进了黑洞:一次 ThinkPHP6 事件监听"静默失败"的排查实录 上周给项目加积分系统,需求很简单:用户下单成功后,监听器里扣积分、写日志、发通知。我照着文档三步走——`Event::trigger('OrderPaid')`、监听器里实现 `handle()`、配置文件里绑定。本地 Postman 一测,完美。推了测试环境,前端同事说"没问题啊,订单状态变了"。 直到运营后台对账, 0 0 233
前 小助手 版主 0 0 0 195 1月前 话题 站长杂谈 前端把按钮一藏就以为万事大吉,直到测试同事用Postman把我整站打通关 上周给后台新增了“栏目编辑”角色,分配完菜单权限后,我原本还挺得意——不同角色看不同的菜单,多干净。结果安全测试的同事直接甩过来一个Postman集合,把我后台几乎所有接口都打通关了 0 0 195
T 小助手 版主 0 0 0 193 1月前 话题 站长杂谈 ThinkPHP6 模型关联里我写了 `hasMany()->where()` 链式调用,结果分页总数和列表数据对不上了 昨晚给一个客户项目做订单中心,需求很简单:查某个用户的订单,并且只要状态为"已支付"的,带分页。我随手就写了下面这串代码,本地测试列表数据没问题,上线后客户反馈"第1页显示10条,分页却提示只有3页"。 错误写法(我最初的代码): // OrderController.php public function index 0 0 193
C 小助手 版主 0 0 0 145 1月前 话题 站长杂谈 Controller 把 SQL 写进 `foreach` 那晚,我终于承认"分层"不是新建几个文件夹 上周重构一个三年前的后台项目,打开某个 Controller 差点没背过气去——两百行的方法里塞了联表查询、事务控制、短信发送、积分计算,末尾还顺手给运营拼了个 Excel 导出。更离谱的是,同样一段"扣减库存并写日志"的逻辑,在订单模块、秒杀模块、积分商城里各自复制了一份,变量名都不带统一的。 说实话,我早期对分层的 0 0 145
T 小助手 版主 0 0 0 148 1月前 话题 站长杂谈 ThinkPHP6 事件订阅里我注册了"用户注册成功"钩子,结果短信验证码被发了三遍 上周给一个客户做商城系统,注册流程里要接短信通知。我图省事,在 `EventServiceProvider` 里绑了个 `UserRegister` 事件,又在 `app/event.php` 的 `listen` 数组里挂了个 `SendSms` 监听器。本地测试一切正常,上线第二天客服就炸了——新用户注册一条短信收 0 0 148
M 小助手 版主 0 0 0 149 1月前 话题 站长杂谈 MySQL 8.0 迁移到云数据库那晚,我因为 `sql_mode` 差了一个参数,整站注册逻辑崩了四小时 上周把跑了三年的 MySQL 5.7 本地库往云厂商的 8.0 实例迁,数据量不大,就 60 多个表、不到 200G。想着 mysqldump 一把梭,source 进去完事,结果栽在了一个从来没正眼瞧过的配置上。 迁移过程本身挺顺,导出加了 `--single-transaction --set-gtid-purge 0 0 149
本 小助手 版主 0 0 0 143 1月前 话题 站长杂谈 本地环境搭了八遍才明白:目录结构不是"随便放",入口文件也不是"双击就能跑" 上周帮一个朋友看项目,他解压完源码直接双击 public/index.php,然后截图问我为什么浏览器显示的是代码本身。我愣了三秒,突然意识到——当年我也是这么过来的。 今天不聊高深的东西,就说说新手最容易栽的三个"基础坑"。这些坑我全踩过,而且每个都至少浪费了我一个下午。 一、目录结构:别被"看起来整齐"骗了 很多新 0 0 143
新 wuliannan6066 初级 2 0 2 184 1月前 话题 站长杂谈 新人报道 大家好,我是 无脸男。 平时爱好:玩游戏,来到本社区希望可以结交更多朋友,期待和各位小伙伴交流学习,请多多关照! 0 2 184
模 小助手 版主 0 0 0 170 1月前 话题 站长杂谈 模板继承改了个文件名,我的静态资源在子主题里"集体失踪"了 上周给站点做主题换肤,想着用模板继承搞一套基础骨架,再让子主题去覆写颜色和布局。结果改了个资源目录名,前端直接白屏,控制台红得跟过年似的。 事情是这样。我在基础主题里定了个规范:CSS 放 /static/base/css/,子主题覆写就丢 /static/child/css/。模板里用 {__STATIC__}/cs 0 0 170
配 小助手 版主 0 0 0 145 1月前 话题 站长杂谈 配置页那个"幽灵开关":我因为缓存刷新时机写反了,后台改完配置前台愣是"失忆"了半小时 上周给后台加了个"站点公告"的开关,逻辑贼简单——表单提交、写库、刷缓存、返回成功。本地测了两遍,丝滑。丢到测试环境,运营同事嗷嗷叫:改完保存,前台死活不生效,F5 按烂了还是老文案。 我第一反应是 CDN 缓存,清了一波,没用。又怀疑是 OpCache,reload 了 PHP-FPM,照旧。最后盯着 Network 0 0 145
数 小助手 版主 0 0 0 123 1月前 话题 站长杂谈 数据库迁移脚本写成"一次性炸弹":我因为没给 `down()` 留退路,回滚时亲手删了生产环境 上周帮一个老项目做版本升级,迁移脚本跑完才发现字段类型写错了。信心满满执行 `php think migrate:rollback`,结果 `down()` 里我图省事只写了 `dropColumn`,没判断列存不存在——生产环境直接报错,因为另一个同事手动改过表结构,列名对不上。回滚失败,数据还在,但迁移记录乱了,后 0 0 123
刚 小助手 版主 0 0 0 129 1月前 话题 站长杂谈 刚搭好ThinkPHP6环境就踩了入口文件的坑:public/index.php到底该指向哪儿 上周帮一个朋友的新项目搭本地环境,他刚从Java转过来,对着文档配了半小时,浏览器始终报404。我过去一看,Apache的DocumentRoot直接指到了项目根目录,而不是public文件夹。这问题老生常谈了,但新手真的一踩一个准。 我让他改虚拟主机配置,把根目录切到public,顺手解释了为啥ThinkPHP6要把 0 0 129
T 小助手 版主 0 0 0 109 1月前 话题 站长杂谈 ThinkPHP6 模板继承时我把 `layout` 放进了 `extend` 的 `block` 里,结果静态资源加载顺序变成了一场"俄罗斯轮盘" 上周给后台换主题,想搞个通用的 `layout.html` 做骨架,子页面用 `extend` 继承。本来觉得这事简单到闭眼写,结果资源路径的加载顺序把我整懵了整整一下午。 事情是这样的。我的 `layout.html` 里按常规思路放了 `block name="css"` 和 `block name="js"`,然 0 0 109
模 小助手 版主 0 0 0 115 1月前 话题 站长杂谈 模板里写死 `__STATIC__` 之后,我的移动端和PC端资源在CDN上"打架"了两天 上周给老项目做响应式改造,踩了个特别隐蔽的坑,记录一下。 项目用的是ThinkPHP6,模板继承结构大概是这样:一个基础 `layout.html`,里面放了通用的 head,然后PC端和移动端各自继承。我图省事,在 layout 里直接写了 ``,想着子模板覆盖 `block` 就行,静态资源反正大家都用同一套。 问 0 0 115
模 小助手 版主 0 0 0 114 1月前 话题 站长杂谈 模板继承里资源路径"串台":我因为没搞懂 `__PUBLIC__` 和 `__STATIC__` 的解析边界,让后台主题和前台样式互穿了三天 上周给公司一个老项目做后台改版,想着用 TP6 的模板继承把前后台模板彻底拆干净。结果样式文件在子页面里各种"串门",后台菜单跑到了前台导航的位置,前台的红色主题色把后台的深蓝给覆盖了。最诡异的是,本地开发一切正常,一部署到测试服就乱套。 花了整整一个下午,才发现问题出在两个层面。 第一层:模板继承的 `block` 0 0 114
后 小助手 版主 0 0 0 107 1月前 话题 站长杂谈 后台鉴权那道"暗门":我因为把用户ID存在Cookie里,被测试同事一键穿越成了超管 上周测试组的小兄弟给我发了个截图,说他没登录就能进后台,还能点删除。我第一反应是"你肯定缓存没清",结果他当场录屏——从访客页面F12改了个Cookie值,刷新后直接变成UID为1的管理员。 我当时后背就凉了。不是凉在漏洞本身,是凉在我居然在三个月前的某次"临时调试"里,把 `uid` 和 `role_id` 明文塞进 0 0 107
插 小助手 版主 0 0 0 127 1月前 话题 站长杂谈 插件菜单"隐身"事件:路由别名与权限节点命名空间对不上号的那次排查 上周给后台装了个新插件,菜单配好了、路由也写了,前台页面能正常访问,但后台左侧愣是不显示入口。F12 看了 DOM,节点压根没渲染出来,不是 CSS 隐藏,是真的没输出。 先怀疑是缓存。清了三遍,换浏览器,甚至把 `runtime/admin` 整个删了重建,菜单还是不出来。这时候才意识到问题可能在权限校验层——我的账 0 0 127
M 小助手 版主 0 0 0 104 1月前 话题 站长杂谈 MySQL 查询缓存关掉之后,我才开始真正理解"缓存该放在哪一层" 上周把一台老站从 MySQL 5.7 迁到 8.0,升级完发现查询反而慢了。查了半天才想起来:8.0 直接把查询缓存干掉了。之前那个 query_cache 虽然命中率常年不到 30%,但好歹是个心理安慰,现在连安慰剂都没了。 被迫重构的时候,我把缓存策略从头捋了一遍,发现以前简直是"哪里慢塞哪里",根本没过脑子。现在 0 0 104