MediaWiki升级PHP8.1后访问特殊页面报$title参数错误
问题记录
在MediaWiki 1.37环境安装v1.38版本Google Login扩展时,首次触发解析错误:
ParseError: syntax error, unexpected 'static' (T_STATIC)
将PHP版本升级至8.1后,登录页场景的上述解析错误已解决,但访问特殊页面列表页(访问路径/index.php/Sp%C3%A9cial:Pages_sp%C3%A9ciales)时触发新异常,完整报错与调用栈如下:
/index.php/Sp%C3%A9cial:Pages_sp%C3%A9ciales Wikimedia\Assert\ParameterAssertionException: Bad value for parameter $title: should not be empty unless namespace is main Backtrace: from /disk2/wikiwetag/public_html/vendor/wikimedia/assert/src/Assert.php(72) #0 /disk2/wikiwetag/public_html/includes/title/TitleValue.php(210): Wikimedia\Assert\Assert::parameter(boolean, string, string) #1 /disk2/wikiwetag/public_html/includes/title/TitleValue.php(164): TitleValue::assertValidSpec(integer, string, string, string) #2 /disk2/wikiwetag/public_html/includes/specialpage/SpecialPage.php(126): TitleValue->__construct(integer, string, string) #3 /disk2/wikiwetag/public_html/includes/specialpage/SpecialPage.php(109): SpecialPage::getTitleValueFor(string, boolean, string) #4 /disk2/wikiwetag/public_html/includes/specialpage/SpecialPage.php(745): SpecialPage::getTitleFor(string, boolean) #5 /disk2/wikiwetag/public_html/includes/specials/SpecialSpecialpages.php(69): SpecialPage->getPageTitle() #6 /disk2/wikiwetag/public_html/includes/specials/SpecialSpecialpages.php(42): SpecialSpecialpages->getPageGroups() #7 /disk2/wikiwetag/public_html/includes/specialpage/SpecialPage.php(647): SpecialSpecialpages->execute(NULL) #8 /disk2/wikiwetag/public_html/includes/specialpage/SpecialPageFactory.php(1366): SpecialPage->run(NULL) #9 /disk2/wikiwetag/public_html/includes/MediaWiki.php(314): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #10 /disk2/wikiwetag/public_html/includes/MediaWiki.php(930): MediaWiki->performRequest() #11 /disk2/wikiwetag/public_html/includes/MediaWiki.php(564): MediaWiki->main() #12 /disk2/wikiwetag/public_html/index.php(55): MediaWiki->run() #13 /disk2/wikiwetag/public_html/index.php(48): wfIndexMain() #14 {main}
根因分析
- 首个
T_STATIC解析错误由PHP版本过低导致:v1.38版Google Login扩展使用了PHP 8.0及以上版本才支持的静态语法特性,低版本PHP无法解析对应代码,升级PHP到8.1的操作可以解决该问题。 - 第二个特殊页面报错由扩展与MediaWiki核心版本不匹配导致:Google Login v1.38是为MediaWiki 1.38核心适配的版本,在1.37核心下运行时,扩展注册特殊页面传入的空标题参数不符合1.37版本
TitleValue类的校验规则——1.37版本强制要求非主命名空间下的页面标题不得为空,最终触发参数断言异常。
修复方案
- 优先方案:将MediaWiki核心升级至1.38版本,与已安装的Google Login扩展版本完全对齐,升级后所有版本兼容类问题会自动消除。
- 替代方案:若暂时无法升级MediaWiki核心,卸载当前v1.38版本的Google Login扩展,更换为适配MediaWiki 1.37的对应历史版本即可,禁止跨大版本匹配MediaWiki核心与扩展。
- 验证方法:临时禁用Google Login扩展后刷新特殊页面列表,若页面恢复正常访问,即可确认异常由该扩展版本不匹配导致。
内容的提问来源于stack exchange,提问作者Tarek Fellah
相关产品推荐
相关产品推荐

