T ToutadminДокументация

Две редакции, один продукт

Toutadmin существует в двух экземплярах: один работает на Node.js, другой на PHP. Это не два продукта и не урезанная версия рядом с полной. Это те же 51 разделов, та же схема из 142 таблиц, те же 16 языков, те же экраны. Эта страница говорит, что их разделяет на самом деле, — и это немного.

Почему их две#

Продукт для предприятия должен ставиться там, где предприятие уже находится. У одних есть сервер, systemd и администратор; у других — виртуальный хостинг за четыре евро в месяц и доступ по FTP. Редакция Node обращается к первым, редакция PHP — ко вторым. Отказать вторым значило бы отказать половине компаний, которым инструмент управления нужнее всего.

Что совпадает в точности#

ПоказательNodePHP
Рабочие разделы5151
Таблиц в базе142142
Столбцов13111311
Языков интерфейса1616
Ключей перевода27652792
Дополнительных модулей77
Событий веб-перехватчиков88
Ресурсов API99

Поскольку схема одна и та же, база переходит из одной редакции в другую без преобразования: остановите одну, скопируйте app.sqlite и папки с файлами, запустите другую. Пароли продолжают работать — обе редакции читают один формат хеша. Это самая честная проверка паритета, и она пройдена.

Что различается#

Форма нескольких адресов#

531 маршрутов со стороны Node, 513 со стороны PHP. Разрыв — не нехватка: это те же функции, записанные короче.

  • API. Node объявляет свои девять ресурсов по одному (/api/v1/collaborateurs, /api/v1/services…); PHP обслуживает их одним маршрутом с параметром. Отвечают все девять, корень объявляет все девять, и тест вызывает их по одному, чтобы это доказать.
  • Установка. Node ведёт в пять шагов, PHP умещается на одной странице и в одной отправке. Спрашивают одно и то же: язык, требования, организацию, число дней годового отпуска, учётную запись администратора.
  • Сквозные права. У Node по маршруту на каждое право, у PHP — один маршрут с параметром /admin/droits/{flag}.

Эти двадцать восемь различий в форме не утверждаются по памяти: файл tests/test_parity.php проверяет каждое из них поодиночке.

Периодический обход#

Node несёт собственный планировщик: сервер работает постоянно и будит себя сам. PHP живёт только во время запроса: те же восемь операций проходят через tools/cron.php, вызываемый планировщиком хостинга. Тот же прикладной код, тот же результат, другой спусковой механизм.

Даты#

Node пишет даты через Intl, встроенный в V8. PHP делает то же, когда есть расширение intl, — тот же движок ICU, совпадение до символа. Когда его нет, названия дней и месяцев берутся из словарей перевода: дата остаётся верной и переведённой, но порядок частей в некоторых языках может отличаться.

Что не различается, хотя казалось бы должно#

ПредметВ обеих редакциях
QR-коды (двухфакторная проверка)Кодировщик, написанный вручную на стороне PHP и сверенный побайтно с библиотекой, используемой на стороне Node, на шестнадцати длинах текста.
Архивы резервных копийtar.gz, написанный без зависимостей с обеих сторон: то же содержимое, те же контрольные суммы SHA-256.
Бухгалтерский почтовый ящик IMAPКлиент IMAP, написанный внутри продукта с обеих сторон.
PDF, CSV, импортНаписаны внутри продукта, на выходе те же файлы.
Журнал аудитаОдинаковое сцепление хешей: изменённая строка рвёт цепочку, с обеих сторон.
Политика безопасности HTTPТе же заголовки, та же CSP с разовым значением, то же отсутствие незаменимого JavaScript.

Какую выбрать#

Ваш случайРедакция
Виртуальный хостинг, доступ по FTP, нет командной строкиPHP — ровно тот случай, ради которого она сделана
Свой сервер, systemd, администраторNode
Вы уже умеете вести одну из нихЕё. Паритет делает выбор обратимым.
Много людей одновременноNode — постоянный процесс, база уже открыта
Вы колеблетесьPHP — меньше деталей в обслуживании, а переход на Node остаётся копированием файлов

Как паритет удерживается#

Это не намерение, а проверка. При каждом изменении проходят четыре сравнения:

  1. Маршруты — извлекаются с обеих сторон и сравниваются; всякое расхождение должно быть задокументированным различием.
  2. Функции — имена, которые выставляет каждый модуль, сравниваются модуль за модулем.
  3. Схема — таблицы и столбцы считываются из обеих баз и сравниваются.
  4. Экраны — обе редакции запускаются рядом и обходятся настоящим браузером, страница за страницей, со сверкой кода ответа и структуры.

Эти четыре прохода нашли настоящие дефекты — в том числе два, затрагивавшие обе редакции. Именно это делает их полезными: паритет, который не измеряют, — это паритет, который потеряли, не заметив.

К этому добавляются наборы тестов: 802 случаев со стороны Node, 572 со стороны PHP, всего 1374.

Документация Toutadmin — собрана 2026-09-13. Самостоятельный сайт, независимый от программы.