MediaWiki 內部錯誤
多年來,我一直在我的公司執行 mediawiki 伺服器。最近,為了解決我在上傳包含元數據時遇到的 PDF 上傳問題,我已將我的 Gentoo 盒子上所有軟體的最新版本(Mediawiki 1.18.1、PHP 5.4.0、PostgreSQL 9.1.3)移至最新版本
現在某些頁面(使用量很大的兩個類別頁面)返回相同的 PHP 錯誤。
警告:第 1377 行 /var/www/localhost/htdocs/includes/db/Database.php 中的非法字元串偏移量 ‘LIMIT’
然後它有 5 或 6 條關於該錯誤的投訴。然後是一行:
警告:在第 177 行的 /var/www/localhost/htdocs/includes/resourceloader/ResourceLoaderWikiModule.php 中為 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 直接應用於刪除表單)。然後,我使用維護腳本清除了所有存檔頁面(AKA,已刪除頁面)的數據庫。一切都無濟於事。數據庫對這些頁面有一些奇怪的問題,我不知道如何清除它們以便我可以重新創建它們!
好的,所以我已經解決了這個問題。原來問題出在 PHP 5.4.0 上。我降級到 PHP 5.3.10 並且整個事情再次完美執行。由於某種原因,5.4 版在與 PostgreSQL 互動時會出現一些問題。
如果有人知道這其中的原因,我敢肯定我不是唯一一個願意知道為什麼會發生這種情況的人。