Loading
Typecho插件故障,导致无法禁用,强制删除网站首页都进不去了?

Typecho插件故障,导致无法禁用,强制删除网站首页都进不去了?

fghdlz
昨天发布 /正在检测是否收录...

一次 Typecho 插件故障的完整自救记录:从报错到恢复 🚑

前言

前两天,我的 Typecho 博客突然就挂了😱。罪魁祸首是一个叫 WebFirewall 的插件。这玩意儿出问题后,后台那个“禁用”按钮怎么点都没反应,最后整个博客直接摆烂,给我看这个报错:
mlq56so3.png

call_user_func_array(): Argument #1 ($callback) must be a valid callback, 
class "TypechoPlugin\WebFirewall\WebFirewall" not found

折腾了好几个小时,总算是把它给收拾服帖了。这篇就把我完整的排查和修复过程记录下来,万一你哪天也遇到这糟心事,希望能帮你省点时间⏰。


一、事情是怎么发生的?🤔

整个过程是这样的:

  1. 我装了个 WebFirewall 插件
  2. 这货可能跟我博客里别的插件八字不合,或者它自己就有 bug
  3. 我想去后台把它禁了,结果那个“禁用”按钮就是个摆设,点了一万遍都没反应
  4. 一刷新页面,好家伙,博客直接给我脸色看,白屏报错,前台后台都进不去了

当时的状态就是:

  • ✅ 前台:无法访问(卒)
  • ✅ 后台:也进不去(双卒)
  • ✅ 插件文件:虽然还在,但已经是个废物了
  • ✅ 禁用按钮:彻底失灵

二、试试“曲线救国

注意,请异地导出你的数据库再进行以下操作

2.1 上传一个“空壳”插件

当你强制删除了WebFirewall,报错不是说找不到 WebFirewall 这个类吗?那我给它一个不就完了!

/usr/plugins/WebFirewall/ 目录下创建一个 Plugin.php 文件,里面就写这几行:

<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
class WebFirewall_Plugin {}

上传,刷新网站——报错依然坚挺

这说明问题根子不在文件里,而是在数据库里。


三、直捣黄龙,查数据库!🔍

3.1 登录数据库

我用的是 1Panel 面板,直接点进 phpMyAdmin 就是干。

3.2 找到关键线索表

Typecho 的插件信息都藏在 typecho_options 表里,最关键的一行是 name = 'plugins'

点开看 value 字段,好家伙,一串长长的序列化字符串,里面果然有料:

...s:10:"WebFirewa";a:1:{s:13:"activated";b:1;s:7:"version";s:5:"1.0.0";}...

看到了吧,数据库里还死死记着这个插件是“已激活”状态呢!

3.3 地毯式搜索,不留死角

为了清干净,我执行了 SQL 语句,看看还有哪儿藏着它:

SELECT * FROM typecho_options WHERE value LIKE '%WebFirewa%';

结果发现:

  • plugins 字段里有它
  • panelTable 字段里居然也有它的影子

四、终极清理,一招制敌 💪

4.1 清空插件列表(最暴力也最有效)

直接把 name = 'plugins' 那一行的 value 改成:

a:0:{}

这串代码的意思就是“没有任何启用的插件”。简单粗暴,但有效!

UPDATE typecho_options SET value = 'a:0:{}' WHERE name = 'plugins';

4.2 清理 panelTable 里的残留

UPDATE typecho_options 
SET value = REPLACE(value, 's:10:"WebFirewa";a:1:{s:13:"activated";b:1;s:7:"version";s:5:"1.0.0";}', '')
WHERE name = 'panelTable' AND value LIKE '%WebFirewa%';

4.3 见证奇迹的时刻✨

修改完数据库,怀着激动的心,颤抖的手,刷新博客首页——恢复了!恢复了! 我的博客又回来了!


五、打扫战场,收尾工作 🧹

5.1 重新启用插件

赶紧登录后台 → 插件管理,把我之前用的那些正经插件(比如 pScaleUpPlusAutoSlug 这些)重新启用起来。谢天谢地,配置都还在,不用重新设置。

六、吃一堑,长一智的经验总结 📝

6.1 插件故障时,UI 按钮就是个弟弟

插件自己都挂了,它那个“禁用”按钮的代码根本跑不起来。这时候:

  • ✅ 直接操作数据库,那才是最根本的解决方案
  • ❌ 死磕后台那个按钮,只会让你怀疑人生

七、给兄弟姐妹们的几句心里话 ❤️

  1. 数据库一定要定期备份! —— 这玩意儿关键时刻能救你老命
  2. 插件这玩意儿,够用就行,别贪多 —— 每多一个插件,就多一个潜在的雷
  3. 学会直接操作数据库 —— 这是绕过所有 UI 故障的终极大招,值得拥有

结语

这次故障从发生到解决,前前后后花了差不多半天。虽然过程挺折腾人的,但也让我对 Typecho 的插件原理、数据库结构、以及缓存策略这些,都有了更深的理解。

如果你也遇到类似的倒霉事儿,希望这篇文章能给你指条明路,少走点弯路。

有啥问题或者想交流的,欢迎在下面留言!👇

喜欢就支持一下吧
点赞 0 分享 收藏
评论 共6条
OωO
取消
  1. 头像
    老王爱折腾
     · 
    回复

    实操有效!按你的方法进phpMyAdmin改了plugins字段,瞬间复活。多谢大佬分享,已收藏⭐

  2. 头像
    清风徐来
     · 
    回复

    虽然看不太懂SQL那段,但感觉作者写得很详细,先码住备用。顺便问下,1Panel面板好用吗?我还在用宝塔

  3. 头像
    007
     · 
    回复

    提个建议,其实不用清空整个plugins,可以直接反序列化把那个插件删掉就行。不过暴力法确实适合新手,赞一个

  4. 头像
    喷火龙
     · 
    回复

    文章开头写“完整自救记录”,结果就是改两行SQL?这叫完整?

  5. 头像
    技术喷火龙
     · 
    回复

    真服了,还“直捣黄龙”,进个phpMyAdmin就叫直捣黄龙了?装逼装得挺像。

  6. 头像
    无名氏
     · 
    回复

    写得啰里八嗦的,半天没看到重点,差评!

隐藏
换装