Twee edities, één product
Toutadmin bestaat in twee exemplaren: het ene draait op Node.js, het andere op PHP. Het zijn geen twee producten, en evenmin een uitgeklede en een volledige versie. Het zijn dezelfde 51 ruimtes, hetzelfde schema van 142 tabellen, dezelfde 16 talen, dezelfde schermen. Deze pagina zegt wat hen werkelijk scheidt — en dat is weinig.
Waarom twee#
Een bedrijfsproduct moet te installeren zijn waar het bedrijf al zit. Sommige hebben een
server, een systemd en een beheerder; andere hebben gedeelde hosting voor
vier euro per maand en een FTP-account. De Node-editie richt zich op de eerste, de
PHP-editie op de tweede. De tweede afwijzen zou betekenen dat je de helft van de
bedrijven afwijst die een beheertool het hardst nodig hebben.
Wat strikt identiek is#
| Onderdeel | Node | PHP |
|---|---|---|
| Werkruimtes | 51 | 51 |
| Tabellen in de database | 142 | 142 |
| Kolommen | 1311 | 1311 |
| Interfacetalen | 16 | 16 |
| Vertaalsleutels | 2765 | 2792 |
| Optionele modules | 7 | 7 |
| Webhook-gebeurtenissen | 8 | 8 |
| API-bronnen | 9 | 9 |
Omdat het schema hetzelfde is, gaat een database zonder conversie van de ene
editie naar de andere: stop de ene, kopieer app.sqlite en de
bestandsmappen, start de andere. De wachtwoorden blijven werken — beide edities lezen
hetzelfde hashformaat. Dat is de eerlijkste paritietstest die er is, en hij slaagt.
Wat verschilt#
De vorm van een paar adressen#
531 routes aan de Node-kant, 513 aan de PHP-kant. Het verschil is geen tekort: het zijn dezelfde functies, compacter geschreven.
-
De API. Node declareert zijn negen bronnen stuk voor stuk
(
/api/v1/collaborateurs,/api/v1/services…); PHP bedient ze onder één route met parameter. Alle negen antwoorden, de wortel kondigt alle negen aan, en een test roept ze één voor één aan om het te bewijzen. - De installatie. Node leidt je door vijf stappen, PHP past op één pagina en één verzending. Er wordt om dezelfde vijf gegevens gevraagd: taal, vereisten, onderneming, jaarlijkse verlofdagen, beheerdersaccount.
-
De overkoepelende rechten. Node heeft één route per recht, PHP één
route met parameter
/admin/droits/{flag}.
Deze achtentwintig vormverschillen worden niet uit het hoofd beweerd: het bestand
tests/test_parity.php oefent ze allemaal, één voor één.
De periodieke ronde#
Node draagt zijn eigen planner: de server draait permanent en wekt zichzelf. PHP leeft
alleen tijdens een aanvraag: dezelfde acht bewerkingen lopen via
tools/cron.php, aangeroepen door de cron van de hoster. Dezelfde
bedrijfslogica, hetzelfde effect, een andere aanleiding.
De datums#
Node schrijft zijn datums met Intl, ingebouwd in V8. PHP doet hetzelfde
zodra de uitbreiding intl aanwezig is — dezelfde ICU-motor, tot op het teken
dezelfde uitkomst. Ontbreekt ze, dan komen dag- en maandnamen uit de
vertaalwoordenboeken: de datum blijft juist en vertaald, maar de volgorde van de
onderdelen kan in een paar talen afwijken.
Wat niet verschilt, terwijl je dat wel zou denken#
| Onderwerp | In beide edities |
|---|---|
| QR-codes (tweefactor) | Aan de PHP-kant met de hand geschreven codeerder, byte voor byte getoetst aan de bibliotheek die aan de Node-kant wordt gebruikt, over zestien tekstlengtes. |
| Back-uparchieven | Aan beide kanten zonder enige afhankelijkheid geschreven tar.gz, dezelfde inhoud, dezelfde SHA-256-waarden. |
| IMAP-boekhoudpostvak | Aan beide kanten een IMAP-cliënt die in het product zelf staat. |
| PDF, CSV, import | In het product geschreven, dezelfde bestanden eruit. |
| Auditlogboek | Identieke ketening van hashes: één gewijzigde regel breekt de ketting, aan beide kanten. |
| HTTP-beveiligingsbeleid | Dezelfde headers, dezelfde CSP met nonce, dezelfde afwezigheid van onmisbare JavaScript. |
Welke kiezen#
| Uw situatie | De editie |
|---|---|
| Gedeelde hosting, FTP-toegang, geen opdrachtregel | PHP — precies het beoogde geval |
Een eigen server, systemd, een beheerder | Node |
| U kunt er al één beheren | Die. De pariteit maakt de keuze omkeerbaar. |
| Veel mensen tegelijk | Node — één blijvend proces, de database al open |
| U twijfelt | PHP — minder onderdelen om te onderhouden, en overstappen naar Node blijft bestanden kopiëren |
Hoe de pariteit wordt vastgehouden#
Het is geen voornemen, het is een controle. Bij elke wijziging lopen vier vergelijkingen:
- De routes — aan beide kanten uitgelezen en vergeleken; elk verschil moet een gedocumenteerd verschil zijn.
- De functies — de namen die elke module naar buiten brengt, module voor module vergeleken.
- Het schema — tabellen en kolommen uit beide databases gelezen en vergeleken.
- De schermen — beide edities naast elkaar gestart en door een echte browser doorlopen, pagina voor pagina, met vergelijking van antwoordcode en structuur.
Deze vier rondes hebben echte gebreken gevonden — waaronder twee die beide edities troffen. Dat is wat ze nuttig maakt: een pariteit die je niet meet, is een pariteit die je ongemerkt kwijt bent.
Daarbij komen de testsuites: 802 gevallen aan de Node-kant, 572 aan de PHP-kant, samen 1374.
De Node-editie installeren
Dienst, omgekeerde proxy, TLS, back-ups, bijwerken.
De PHP-editie installeren
Gedeelde hosting, rechten, cron, TLS.
Toutadmin-documentatie — gebouwd op 2026-09-13. Zelfstandige site, onafhankelijk van de software.