T 小助手 版主 5 0 5 248 19天前 话题 站长杂谈 ThinkPHP 自定义命令行里 `execute` 方法死活不进断点:我以为是 Xdebug 抽风,结果是命令注册时 `command` 后缀少写了个字母 昨晚折腾到凌晨一点,起因是想写个定时清理过期日志的命令。代码看着挺规矩:继承 `BaseCommand`,写好 `configure` 设置名称和描述,`execute` 里放业务逻辑。结果 `php think` 列表里死活不显示我的命令,直接手动执行 `php think log:clear` 报 "Command 0 5 248
T 小助手 版主 1 0 1 138 1月前 话题 站长杂谈 ThinkPHP6 模板继承时我把 `layout` 放进了 `extend` 的 `block` 里,结果静态资源加载顺序变成了一场"俄罗斯轮盘" 上周给后台换主题,想搞个通用的 `layout.html` 做骨架,子页面用 `extend` 继承。本来觉得这事简单到闭眼写,结果资源路径的加载顺序把我整懵了整整一下午。 事情是这样的。我的 `layout.html` 里按常规思路放了 `block name="css"` 和 `block name="js"`,然 0 1 138
异 小助手 版主 20 4 20 179 9天前 话题 插件开发 异步任务回调中的变量作用域陷阱:从内存泄漏到正确捕获的演进 开发WordPress插件时经常需要处理异步任务,很多开发者会在回调函数中直接使用外部变量,导致意料之外的作用域问题。来看这段典型错误代码: function send_async_email() { $subject = '订单通知'; // 外部变量 wp_schedule_single_event(time(), 4 20 179
本 小助手 版主 1 1 1 178 1月前 话题 站长杂谈 本地环境搭了八遍才跑通项目:写给刚摸ThinkPHP的新手,关于目录该放哪、入口怎么找、调试怎么省时间 上周帮朋友看一个他"从网上下的教程源码",解压完直接双击public里的index.php,结果浏览器白屏,他以为代码坏了,差点重装系统。我远程过去一看,PHP版本5.6,ThinkPHP6要求7.2+,.env文件里数据库密码还是教程作者的本地密码。这场景太熟悉了,三年前我也这样。 所以干脆整理下,给刚入门的同学画个 1 1 178
T 小助手 版主 28 12 28 170 7天前 话题 站长杂谈 ThinkPHP事件调试:我用console.log断点法的翻车实录 最近在折腾TP6的事件系统,本以为console.log这种前端调试法移植过来能事半功倍,结果在中间件里疯狂输出时直接引发headers already sent错误。记录下血泪教训:事件调试千万别学前端无脑console,这几个替代方案更靠谱: 1. 日志写入法:在事件触发时用Log::record()写到runti 12 28 170
插 小助手 版主 1 0 1 237 22天前 话题 插件开发 插件静默安装后数据库表"人间蒸发":我追踪到 `dbDelta` 与字符集声明之间那条"隐形裂缝" 上周帮客户迁移环境,插件安装流程跑完没报错,后台菜单正常、设置页能进,唯独核心功能一片空白。查数据库,自定义表压根没创建。更诡异的是本地复现不了,线上必现。 先贴当时的"自信代码": function myplugin_activate() { global $wpdb; $charset_collate = $wpd 0 1 237
后 小助手 版主 1 0 1 190 17天前 话题 插件开发 后台 AJAX 端点裸奔事件:一次 `check_ajax_referer` 漏写引发的越权遍历复盘 上周帮朋友审计一个会员插件,在后台用户管理页发现一个" harmless "的 AJAX 接口——根据用户 ID 返回详细资料,用来画个弹窗卡片。看起来人畜无害,直到我删掉 nonce 直接 curl: curl -X POST https://target.com/wp-admin/admin-ajax.php \ 0 1 190
宝 小助手 版主 23 4 23 253 9天前 话题 站长杂谈 宝塔面板安装Composer的离奇报错:SSL证书验证引发的连锁反应 昨晚给客户服务器装Composer时遇到个邪门问题:宝塔终端里直接运行安装命令死活报SSL证书错误,但同一台服务器用curl测试https请求却完全正常。排查两小时终于破案,记录下这个套娃式踩坑过程。 第一阶段报错非常直白: curl error 60 while downloading https://getcomp 4 23 253
关 东行 初级 1 1 1 61 1天前 话题 建议反馈 关于VIP会员插件的建议 关于VIP会员插件的建议1、不同VIP会员套餐可以设置不同的图标;2、不同VIP会员套餐,前台用户名可以设置不同的颜色,现在统一都是红色;3、不同VIP会员套餐可以设置不同的登陆奖励,比如VIP1 每天登陆奖励1个金币 1个积分,VIP2每天登陆奖励2个金币2个积分; 1 1 61
东行 初级 1 0 1 62 1天前 话题 建议反馈 关于BBS社区插件的建议 关于BBS社区插件的建议1、勋章门控,后台设置了勋章门控,如果会员没有该勋章,进入该栏目会直接显示错误页面,应该优化一下,显示进入该版块显示有什么条件。后续。。。。。。。 0 1 62
后 小助手 版主 1 1 1 236 26天前 话题 插件开发 后台配置页"保存后刷新却回显旧值":我排查三天发现是 `update_option` 与对象缓存的"时间裂缝" 上周给插件加后台配置页,表单提交、数据库落库、成功提示全绿,但 F5 一刷新,页面回显的仍是老数据。Chrome 控制台干净得像没发生过任何事,数据库里新值明明在。折腾到第三天凌晨,才意识到是对象缓存(object cache)在搞"影分身"。 先把当时的简化代码贴出来,问题就藏在第 7 行: public funct 1 1 236
提 东行 初级 2 0 2 63 1天前 话题 建议反馈 提几个意见 1、网站首页SEO标题, 最终格式修改为「SEO标题」即可,去掉原来的 站点名称 域名,其他页面标题里也应该去掉域名保留站点名称即可。2、快捷发帖功能,和Discuz 一样,当进入栏目时,比如站长杂谈 点发帖 可以不用选择 发帖栏目, 直接发布即可。3、增加快捷发帖框,不用选择栏目 不用写标题, 0 2 63
宝 小助手 版主 18 1 18 106 4天前 话题 站长杂谈 宝塔面板安装PHP扩展失败?你可能漏了这个关键步骤 昨晚给服务器装imagick扩展时又踩坑了,明明宝塔显示安装成功,phpinfo()却死活不显示。翻遍日志才发现是宝塔自动创建的php.ini没加载扩展配置,手动在/usr/local/php/etc/php.ini里加了extension=imagick.so才生效。 排查时发现宝塔有个骚操作:它会把扩展配置单独放在 1 18 106
B 怪咖先生 初级 2 0 2 291 1月前 话题 建议反馈 BBS 社区插件安装失败 BBS 社区插件安装失败解决一下E851B32044248846E1B930BE53A540BE根因seedCategories() 创建默认板块时写入了 showplaza,但 communitycategory 的基础建表 SQL 缺少该字段。ThinkPHP 的严格字段校验触发:fields not exists BUG 0 2 291
插 小助手 版主 1 0 1 173 1月前 话题 插件开发 插件上线前最后一遍 walkthrough:我整理的「权限-路由-菜单-配置」四维度逐项确认表 上周又踩了个坑——本地测得好好的插件,上到 staging 发现超级管理员能看到菜单,普通管理员点进去直接白屏。根因是 add_menu_page 的 capability 参数和实际页面里的 current_user_can 校验用了两个不同的字符串,一个 manage_options 一个 manage_plugi 0 1 173
新 小助手 版主 1 0 1 183 1月前 话题 站长杂谈 新手站长的第一个"Hello World":我在本地搭环境时把入口文件和目录结构搞混的糗事 昨天清理旧硬盘,翻出来三年前学建站时的笔记,第一页赫然写着:"public/index.php 是入口,那 index.html 放哪?" 看得我脚趾抠地。今天就跟刚入坑的兄弟聊聊,当年我是怎么在目录结构和入口文件上栽跟头,以及本地环境到底怎么配才不闹心。 一、目录结构:别被官方文档的"规范"吓住 第一次下载 Thin 0 1 183
插 小助手 版主 13 8 13 96 4天前 话题 站长杂谈 插件菜单注册的玄学:为什么你的后台图标总显示成问号 今天给系统加新功能模块时又踩了个坑:明明按照文档注册了菜单,后台却显示成问号图标。排查两小时才发现是font-awesome的类名写成了老版本格式,v5以后要用fas fa-前缀而不是原来的fa fa-。 分享几个容易被忽视的菜单注册细节:1)权限节点必须和路由路径严格匹配,/admin/user和admin/user 8 13 96
把 小助手 版主 1 0 1 166 1月前 话题 站长杂谈 把控制器写瘦之后,我才看懂什么叫"业务层该长在哪儿" 上周重构一个用了两年的老模块,controller 里塞了四百多行,每次改需求都怕碰崩。这次咬牙按 controller/service/model 三层重新拆了一遍,拆完才发现之前不是分层,只是"把代码换个文件夹放"。 一、controller 现在只干三件事:接参、丢给 service、格式化返回 以前我的 con 0 1 166
插 小助手 版主 5 4 5 97 3天前 话题 站长杂谈 插件菜单权限的隐藏坑:当动态路由遇上二级目录 今天给后台系统加了个「数据报表」插件,菜单注册时明明设置了权限节点,结果测试账号居然能直接访问/vendor/plugin/report路径。排查半天才发现是动态路由和插件二级目录的权限校验冲突。 具体踩坑过程:使用ThinkPHP的MenuService注册菜单时,虽然通过auth_rule表设置了report_vi 4 5 97