Zwei Editionen, ein Produkt
Toutadmin gibt es in zwei Ausfertigungen: die eine läuft auf Node.js, die andere auf PHP. Das sind weder zwei Produkte noch eine abgespeckte und eine vollständige Fassung. Es sind dieselben 51 Bereiche, dasselbe Schema mit 142 Tabellen, dieselben 16 Sprachen, dieselben Masken. Diese Seite sagt, was sie wirklich trennt — und das ist wenig.
Warum zwei#
Ein Unternehmensprodukt muss sich dort installieren lassen, wo das Unternehmen bereits
ist. Manche haben einen Server, ein systemd und eine Administration; andere
haben ein Shared Hosting für vier Euro im Monat und einen FTP-Zugang. Die Node-Edition
richtet sich an die ersten, die PHP-Edition an die zweiten. Die zweiten abzuweisen hätte
geheißen, die Hälfte der Unternehmen abzuweisen, die ein Verwaltungswerkzeug am
nötigsten brauchen.
Was strikt identisch ist#
| Merkmal | Node | PHP |
|---|---|---|
| Fachbereiche | 51 | 51 |
| Tabellen in der Datenbank | 142 | 142 |
| Spalten | 1311 | 1311 |
| Oberflächensprachen | 16 | 16 |
| Übersetzungsschlüssel | 2765 | 2792 |
| Optionale Module | 7 | 7 |
| Webhook-Ereignisse | 8 | 8 |
| API-Ressourcen | 9 | 9 |
Weil das Schema dasselbe ist, wandert eine Datenbank ohne Umwandlung von einer
Edition in die andere: die eine anhalten, app.sqlite und die
Dateiordner kopieren, die andere starten. Die Passwörter funktionieren weiter — beide
Editionen lesen dasselbe Hash-Format. Das ist der ehrlichste Paritätstest, den es gibt,
und er ist bestanden.
Was sich unterscheidet#
Die Form einiger Adressen#
531 Routen auf der Node-Seite, 513 auf der PHP-Seite. Der Unterschied ist kein Mangel: es sind dieselben Funktionen, nur knapper geschrieben.
-
Die API. Node deklariert seine neun Ressourcen einzeln
(
/api/v1/collaborateurs,/api/v1/services…); PHP bedient sie über eine parametrisierte Route. Alle neun antworten, die Wurzel kündigt alle neun an, und ein Test ruft sie einzeln auf, um es zu belegen. - Die Installation. Node führt in fünf Schritten, PHP passt auf eine Seite und ein einziges Absenden. Es werden dieselben fünf Angaben verlangt: Sprache, Voraussetzungen, Unternehmen, Jahresurlaubstage, Administrationskonto.
-
Die übergreifenden Rechte. Node hat eine Route je Recht, PHP eine
einzige parametrisierte Route
/admin/droits/{flag}.
Diese achtundzwanzig Formunterschiede werden nicht aus dem Gedächtnis behauptet: die
Datei tests/test_parity.php übt sie alle durch, einen nach dem anderen.
Der periodische Durchlauf#
Node bringt seinen eigenen Planer mit: der Server läuft dauerhaft, er weckt sich selbst.
PHP lebt nur während einer Anfrage: dieselben acht Vorgänge laufen über
tools/cron.php, aufgerufen vom Cron des Hosters. Gleicher Fachcode, gleiche
Wirkung, anderer Auslöser.
Die Datumsangaben#
Node schreibt seine Daten mit Intl, in V8 eingebaut. PHP tut dasselbe, wenn
die Erweiterung intl vorhanden ist — gleiche ICU-Maschine, aufs Zeichen
gleiche Ergebnisse. Fehlt sie, kommen Tages- und Monatsnamen aus den
Übersetzungswörterbüchern: das Datum bleibt richtig und übersetzt, die Reihenfolge der
Bestandteile kann in einigen Sprachen abweichen.
Was sich nicht unterscheidet, obwohl man es erwarten würde#
| Thema | In beiden Editionen |
|---|---|
| QR-Codes (Zweifaktor) | Auf der PHP-Seite von Hand geschriebener Kodierer, Byte für Byte gegen die auf der Node-Seite verwendete Bibliothek geprüft, über sechzehn Textlängen. |
| Sicherungsarchive | Auf beiden Seiten ohne Abhängigkeit geschriebenes tar.gz, gleicher Inhalt, gleiche SHA-256-Prüfsummen. |
| IMAP-Buchhaltungspostfach | Auf beiden Seiten ein im Produkt geschriebener IMAP-Client. |
| PDF, CSV, Import | Im Produkt geschrieben, gleiche Dateien als Ergebnis. |
| Prüfprotokoll | Gleiche Verkettung von Prüfsummen: eine geänderte Zeile bricht die Kette, auf beiden Seiten. |
| HTTP-Sicherheitsrichtlinie | Gleiche Header, gleiche CSP mit Nonce, gleiche Abwesenheit von unverzichtbarem JavaScript. |
Welche wählen#
| Ihre Lage | Die Edition |
|---|---|
| Shared Hosting, FTP-Zugang, keine Kommandozeile | PHP — genau dieser Fall war gemeint |
Eigener Server, systemd, eine Administration | Node |
| Sie können eine der beiden bereits verwalten | Diese. Die Parität macht die Wahl umkehrbar. |
| Viele gleichzeitige Benutzer | Node — ein dauerhafter Prozess, die Datenbank bereits geöffnet |
| Sie sind unschlüssig | PHP — weniger Teile zu pflegen, und der Wechsel zu Node bleibt ein Kopieren von Dateien |
Wie die Parität gehalten wird#
Sie ist keine Absicht, sondern eine Prüfung. Bei jeder Änderung laufen vier Vergleiche:
- Die Routen — auf beiden Seiten ausgelesen und verglichen; jede Abweichung muss ein dokumentierter Unterschied sein.
- Die Funktionen — die von jedem Modul ausgegebenen Namen, Modul für Modul verglichen.
- Das Schema — Tabellen und Spalten aus beiden Datenbanken gelesen und verglichen.
- Die Masken — beide Editionen nebeneinander gestartet und von einem echten Browser Seite für Seite durchlaufen, mit Vergleich von Antwortcode und Struktur.
Diese vier Durchgänge haben echte Mängel gefunden — darunter zwei, die beide Editionen betrafen. Genau das macht sie nützlich: eine Parität, die man nicht misst, ist eine Parität, die man unbemerkt verloren hat.
Dazu kommen die Testsuiten: 802 Fälle auf der Node-Seite, 572 auf der PHP-Seite, zusammen 1374.
Die Node-Edition installieren
Dienst, Reverse-Proxy, TLS, Sicherungen, Aktualisierung.
Die PHP-Edition installieren
Shared Hosting, Berechtigungen, Cron, TLS.
Toutadmin-Dokumentation — erstellt am 2026-09-13. Eigenständige Website, unabhängig von der Software.