Я уже много лет использую сервер mediawiki в своей компании. Недавно для решения проблемы, с которой я столкнулся с загрузкой PDF-файлов, когда они содержали метаданные, я перешел на последнюю версию всего программного обеспечения на моем компьютере Gentoo (Mediawiki 1.18.1, PHP 5.4.0, PostgreSQL 9.1.3)
Теперь определенные страницы (страницы двух категорий, которые интенсивно используются) возвращают ту же ошибку PHP.
Предупреждение: недопустимое смещение строки 'LIMIT' в /var/www/localhost/htdocs/includes/db/Database.php в строке 1377
Затем у него есть 5 или 6 жалоб на эту ошибку. Затем идет строка:
Предупреждение: неверный аргумент для foreach () в /var/www/localhost/htdocs/includes/resourceloader/ResourceLoaderWikiModule.php в строке 177
Затем говорит, что все это внутренняя ошибка mediawiki.
Затем он сообщает мне, что исходное исключение:
Исходное исключение: исключение «DBQueryError» с сообщением «Произошла ошибка базы данных. Вы забыли запустить maintenance / update.php после обновления? Видеть: http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script Запрос: SELECT COUNT (*) AS страниц, COUNT ((CASE WHEN page_namespace = 14 THEN 1 ELSE NULL END)) AS подкатегории, COUNT ((CASE WHEN page_namespace = 6 THEN 1 ELSE NULL END)) AS файлов FROM "categorylinks", "page" ГДЕ cl_to = 'Item_Groups' И (page_id = cl_from) БЛОКИРОВАТЬ В РЕЖИМЕ ОБМЕНА
Функция: Category :: refreshCounts
Ошибка: 1 ОШИБКА: синтаксическая ошибка в точке "LOCK" или рядом с ней
СТРОКА 1: ... E cl_to = 'Item_Groups' И (page_id = cl_from) LOCK IN SH ...
Я вошел в базу данных и определил, что когда я запускаю тот же запрос из самой базы данных, я получаю ту же ошибку и тот же результат.
И ДА, я запустил функцию update.php.
Я попытался удалить затронутые страницы через бэкдор (вручную применив URL-адрес непосредственно к форме удаления). Затем я очистил базу данных от всех заархивированных страниц (также известных как удаленные страницы) с помощью сценария обслуживания. Все без толку. В базе данных есть странная проблема с этими страницами, и я не могу понять, как их очистить, чтобы я мог воссоздать их снова!
Итак, я решил проблему. Оказывается, проблема в PHP 5.4.0. Я перешел на PHP 5.3.10, и все снова работает отлично. По какой-то причине версия 5.4 вызывает какие-то проблемы при взаимодействии с PostgreSQL.
Если кто-то знает причину этого, я уверен, что я не единственный человек, который хотел бы узнать, почему это происходит.