Mediawiki - скрипт для проверки версий вики и плагинов - 2026
Published: 2026-09-27
Скрипт проверки версий MediaWiki — короткий bash-скрипт, который по списку доменов показывает версию движка, PHP, БД, активный скин и полный список расширений с их версиями. Нужен там, где несколько вики работают на разных версиях: чтобы не переносить шаблоны, код и расширения «по аналогии» и сразу видеть, что доступно на конкретном сайте.
Что делает скрипт:
- по каждому домену запрашивает публичный
api.phpсsiprop=general|extensions|skins— авторизация и SSH не нужны; - выводит версию MediaWiki, версию PHP, тип и версию БД;
- определяет активный скин по классу
skin-…в HTML главной страницы и перечисляет все доступные скины; - показывает префикс ссылок на статьи (
/wiki/или/page/) — чтобы не гадать, какой путь рабочий; - группирует расширения по типу (скины, хуки парсера, служебные страницы, редакторы, API) и печатает их с версиями.
Использование:
- Сохранить код ниже в файл
wiki_versions.sh. - Сделать его исполняемым:
chmod +x wiki_versions.sh. - Запустить со своим списком доменов:
bash wiki_versions.sh site1.net site2.net site3.net— без аргументов берутся домены из массиваDOMAINSв начале скрипта.
Требуются bash, curl, grep и python3 (используется только стандартная библиотека). Скрипт ничего не меняет и ничего не пишет — это чтение публичного API, поэтому его безопасно запускать откуда угодно.
#!/usr/bin/env bash
# Показать версии MediaWiki + расширения + активный скин для всех своих сайтов.
# Использование: bash wiki_versions.sh [домен ...]
set -uo pipefail
DOMAINS=("${@:-}")
if [ -z "${DOMAINS[0]:-}" ]; then
DOMAINS=(site1.net site2.net site3.net)
fi
for d in "${DOMAINS[@]}"; do
api=$(curl -sL --max-time 20 "https://$d/api.php?action=query&meta=siteinfo&siprop=general%7Cextensions%7Cskins&format=json&formatversion=2")
act=$(curl -sL --max-time 20 "https://$d/" \
| grep -oE 'skin-[a-z0-9_-]+' \
| grep -vE '^skin--|clientpref' | head -1 | cut -d- -f2-)
printf '%s' "$api" | DOM="$d" ACT="$act" python3 -c '
import os, json, textwrap, sys
dom, act = os.environ["DOM"], os.environ["ACT"]
try:
q = json.load(sys.stdin)["query"]
except Exception as e:
print("=== %s === ОШИБКА API: %s" % (dom, e)); raise SystemExit
g = q.get("general") or {}
ext = q.get("extensions") or ()
sk = q.get("skins") or ()
base = g.get("base", "")
print("=== %s ===" % dom)
print(" MediaWiki : %s | PHP %s | %s %s" % (
g.get("generator", "?"), g.get("phpversion", "?"),
g.get("dbtype", "?"), g.get("dbversion", "?")))
print(" URL статьи : %s" % ("/page/" if "/page/" in base else "/wiki/"))
print(" Скин актив.: %s | доступные скины: %s" % (
act or "?", ", ".join(s.get("name", "?") for s in sk)))
print(" Расширений : %d" % len(ext))
groups = {}
for e in ext:
etype = e.get("type", "other")
groups.setdefault(etype, list()).append(
("%s %s" % (e.get("name", "?"), e.get("version", ""))).strip())
labels = {"parserhook": "хук парсера/вывод", "specialpage": "служебные страницы",
"other": "прочее", "api": "API", "datavalues": "данные",
"antidote": "SpellCheck", "spam": "антиспам", "media": "медиа"}
for t, items in sorted(groups.items(), key=lambda kv: -len(kv[1])):
print(" [%s] %s" % (labels.get(t, t),
textwrap.fill(", ".join(items), 92, subsequent_indent=" ")))
'
done
site1.net site2.net site3.net — заменить на свои домены.
ℹ️ Информация
Активный скин скрипт определяет эвристикой (по классу skin-… в HTML). Если сайт отдаёт нестандартную разметку, значение может быть пустым — тогда скин смотрят вручную через Special:Version или в LocalSettings.php (переменная $wgDefaultSkin).
