多年来,我一直在公司运行 mediawiki 服务器。最近,为了解决上传包含元数据的 PDF 时遇到的问题,我已将 Gentoo 机器上的所有软件都升级到最新版本(Mediawiki 1.18.1、PHP 5.4.0、PostgreSQL 9.1.3)
现在某些页面(两个使用率很高的类别页面)返回相同的 PHP 错误。
警告:/var/www/localhost/htdocs/includes/db/Database.php 第 1377 行中的非法字符串偏移量“LIMIT”
然后它有 5 或 6 条关于该错误的投诉。然后是以下行:
警告:/var/www/localhost/htdocs/includes/resourceloader/ResourceLoaderWikiModule.php 第 177 行中 foreach() 提供的参数无效
然后说整个事情是 mediawiki 内部错误。
然后它告诉我最初的异常:
原始异常:异常“DBQueryError”,消息为“发生数据库错误。升级后您是否忘记运行maintenance/update.php?请参阅:http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script 查询:SELECT COUNT(*) AS pages,COUNT( (CASE WHEN page_namespace=14 THEN 1 ELSE NULL END) ) AS subcats,COUNT( (CASE WHEN page_namespace=6 THEN 1 ELSE NULL END) ) AS files FROM "categorylinks","page" WHERE cl_to = 'Item_Groups' AND (page_id = cl_from) LOCK IN SHARE MODE
函数:Category::refreshCounts
错误:1 错误:在“LOCK”
第 1 行处或附近存在语法错误:...E cl_to = 'Item_Groups' AND (page_id = cl_from) LOCK IN SH...
我已经进入数据库并确定当我从数据库本身运行相同的查询时,我会得到相同的错误和相同的结果。
是的,我已经运行了 update.php 函数。
我尝试对受影响的页面进行后门删除(手动将 URL 直接应用于删除表单)。然后,我使用维护脚本清除了数据库中所有已存档页面(又称已删除页面)。但都无济于事。数据库对这些页面存在一些奇怪的问题,我不知道如何清除它们,以便我可以重新创建它们!
答案1
好的,我解决了这个问题。原来问题出在 PHP 5.4.0 上。我降级到 PHP 5.3.10,一切又恢复正常。不知为何,5.4 版本在与 PostgreSQL 交互时会出现一些问题。
如果有人知道其中的原因,我相信我不是唯一一个想知道为什么会发生这种情况的人。