0、前言
Typecho 系统精简,适当配置插件可以为 Typecho赋能注入灵魂。
前段时间腾讯云 COS 封禁了我博客的一张图,经过排查发现应该是丁真表情包里面的某一张图,然而资源被封禁后无法查看,因此具体是哪张不得而知。
猜测应该是“易摇丁真:蒸馍,你不扶器吗?”,因为这张图是 2022 年上传的,时隔 1 年才被封禁,并且被封禁的时候恰好某件大事发生,官方回应并不让民众信服,可能有人在官号评论区刷这张图,导致它被全网封禁,各大平台自查存量数据是否存在此图。
言归正传,总之我因此把博客图床服务迁移到 BackBlaze,之后将会出一篇迁移教程,敬请期待。
1、问题描述
正确下载、解压插件到 Typecho 的/usr/plugins/
目录,在后台点击启用插件,提示500
,报错只有一句“无法启用插件”。
2、问题排查
想看解决方案的可以直接跳过,因为这个问题的原因非常弱智,我居然排查了一个小时 XD
以下是排查 Typecho 插件/主题问题的较好步骤,如果你遇到了 Typecho 的问题可以参考下列步骤排查问题。
2.1、调试模式
首先启用 Typecho 强大的调试模式,在config.inc.php
中加入一行:
1 | //开启测试模式 define('__TYPECHO_DEBUG__', TRUE); |
然而依然是相同的报错,Stack Trace 也是无用的内容。
2.2、检查兼容性
切换 PHP7/PHP8,问题仍然存在;
目前我见过的 PHP 版本兼容性问题似乎大部分都是 PHP5 及以下 和 PHP7 及以上 两个版本间的问题,唯一见过 PHP8 不兼容的 PHP7 程序就是 Typecho 1.1 版本,Markdown 解析引擎里使用$array{i}
(而不是$array[i]
)来表示数组元素,这种方式已被 PHP8 取消支持。
检查发现里面的程序使用的是 Typecho 旧版写法,例如:
1 | class B2File_Plugin implements Typecho_Plugin_Interface { ... } |
尝试替换为新版写法:
1 | namespace TypechoPlugin\B2File; ... class Plugin implements PluginInterface { ... } |
仍然无法使用。
事实证明这两种写法 Typecho 1.2 都兼容,看来 Typecho 的前向兼容性做的很好。不过本站模板迁移到 Typecho 1.2 时出现了严重问题,当时捣鼓了 3 天才彻底解决,代价是抛弃了模板自带的配置备份功能,这个功能的实现方法不兼容新版,导致后台模板配置页面根本进不去(虽然说我没有使用过这个功能,去除这个功能完全没有影响 XD)。
3、解决方法
尝试在 Google 搜索无果后发现有人遇到过类似问题,重命名项目文件夹后就可以解决。
尝试把插件文件夹改名为B2File
,重新启用,成功。
4、错误原因
不只是此插件可以用这种方法解决,如果启用插件报错“无法启用”都可以尝试排查是否是文件夹名问题。
正确文件夹名可以通过以下方法获得:
查看Plugin.php
中的类名(或者命名空间名),例如:
1 | // 使用类(旧版写法) class B2File_Plugin implements Typecho_Plugin_Interface // 这里的 B2File 就是正确名称 // 使用命名空间 namespace TypechoPlugin\cosUploadV5; // 这里的 cosUploadV5 就是正确名称 |
一般而言,如果直接从 GitHub 拉取,那么项目文件夹会是Typecho-*
或者typecho-plugin-*
,因此拉取后改文件夹名是个好习惯。
也有一部分插件对文件夹名不敏感,似乎是因为不需要把插件函数绑定到 Typecho 系统功能上。
如果需要,则会将组件注册到 Typecho 系统,这样一来 Typecho 就需要调用对应文件夹中的 Action.php
等函数,如果文件夹名不对自然就会报错了。
解决 Typecho 无法启用插件
评论