T ToutadminBelgeler

İki sürüm, tek ürün

Toutadmin iki nüsha hâlinde vardır: biri Node.js üzerinde, öteki PHP üzerinde çalışır. Bu ne iki ayrı üründür ne de biri kısaltılmış biri tam iki sürüm. Aynı 51 alan, 142 tablolu aynı şema, aynı 16 dil, aynı ekranlar. Bu sayfa onları gerçekte neyin ayırdığını söylüyor — ve ayıran şey pek az.

Neden iki#

Kurumsal bir ürün, şirketin zaten bulunduğu yere kurulabilmelidir. Kimi şirketin sunucusu, systemd'si ve bir yöneticisi vardır; kiminin ise ayda dört euroluk paylaşımlı barındırması ve bir FTP erişimi. Node sürümü birincilere, PHP sürümü ikincilere seslenir. İkincileri geri çevirmek, yönetim aracına en çok ihtiyaç duyan şirketlerin yarısını geri çevirmek olurdu.

Bire bir aynı olanlar#

ÖğeNodePHP
İş alanları5151
Veritabanı tabloları142142
Sütunlar13111311
Arayüz dilleri1616
Çeviri anahtarları27652792
İsteğe bağlı modüller77
Web kancası olayları88
API kaynakları99

Şema aynı olduğu için bir veritabanı bir sürümden ötekine dönüştürme olmadan geçer: birini durdurun, app.sqlite dosyasını ve dosya klasörlerini kopyalayın, ötekini başlatın. Parolalar çalışmaya devam eder — iki sürüm de aynı özet biçimini okur. Bu, var olan en dürüst eşitlik sınamasıdır ve geçilmiştir.

Ayrılan noktalar#

Birkaç adresin biçimi#

Node tarafında 531 yol, PHP tarafında 513. Aradaki fark bir eksik değildir: aynı işlevler daha derli toplu yazılmıştır.

  • API. Node dokuz kaynağını tek tek tanımlar (/api/v1/collaborateurs, /api/v1/services…); PHP ise tek bir parametreli yolla sunar. Dokuzu da yanıt verir, kök dokuzunu birden duyurur ve bir test bunu kanıtlamak için hepsini tek tek çağırır.
  • Kurulum. Node beş adımda yönlendirir, PHP tek sayfaya ve tek gönderime sığar. Aynı beş bilgi sorulur: dil, önkoşullar, şirket, yıllık izin günleri, yönetici hesabı.
  • Yatay yetkiler. Node'da her yetki için bir yol vardır, PHP'de tek bir parametreli yol: /admin/droits/{flag}.

Biçime ilişkin bu yirmi sekiz fark ezberden söylenmiyor: tests/test_parity.php dosyası hepsini tek tek çalıştırıyor.

Dönemsel süpürme#

Node kendi zamanlayıcısını taşır: sunucu sürekli çalışır, kendi kendini uyandırır. PHP yalnızca bir istek boyunca yaşar: aynı sekiz işlem, barındırmanın cron'u tarafından çağrılan tools/cron.php üzerinden geçer. Aynı iş kodu, aynı sonuç, farklı tetikleyici.

Tarihler#

Node tarihlerini V8'e gömülü Intl ile yazar. PHP de intl eklentisi varsa aynısını yapar — aynı ICU motoru, harfi harfine aynı sonuç. Eklenti yoksa gün ve ay adları çeviri sözlüklerinden gelir: tarih doğru ve çevrili kalır, ama öğelerinin sırası birkaç dilde değişebilir.

Ayrılması beklenirken ayrılmayanlar#

Konuİki sürümde de
QR kodları (iki adımlı doğrulama)PHP tarafında elle yazılmış kodlayıcı, Node tarafında kullanılan kitaplığa karşı on altı metin uzunluğunda bayt bayt doğrulandı.
Yedek arşivleriİki tarafta da bağımlılıksız yazılan tar.gz, aynı içerik, aynı SHA-256 özetleri.
IMAP muhasebe kutusuİki tarafta da ürünün içinde yazılmış IMAP istemcisi.
PDF, CSV, içe aktarmaÜrünün içinde yazıldı, çıktı dosyaları aynı.
Denetim günlüğüÖzetlerin zincirlenmesi aynı: değiştirilmiş bir satır zinciri kırar, iki tarafta da.
HTTP güvenlik ilkesiAynı başlıklar, tek kullanımlık değerli aynı CSP, vazgeçilmez JavaScript'in aynı yokluğu.

Hangisini seçmeli#

DurumunuzSürüm
Paylaşımlı barındırma, FTP erişimi, komut satırı yokPHP — tam da bunun için yapıldı
Kendi sunucunuz, systemd, bir yöneticiNode
İkisinden birini yönetmeyi zaten biliyorsunuzOnu. Eşitlik, seçimi geri alınabilir kılar.
Aynı anda çok kişiNode — sürekli tek bir süreç, veritabanı zaten açık
KararsızsanızPHP — bakılacak parça daha az, Node'a geçmek yine dosya kopyalamaktan ibaret

Eşitlik nasıl korunuyor#

Bu bir niyet değil, bir doğrulama. Her değişiklikte dört karşılaştırma yapılır:

  1. Yollar — iki taraftan çıkarılıp karşılaştırılır; her sapma belgelenmiş bir fark olmak zorundadır.
  2. İşlevler — her modülün dışa verdiği adlar, modül modül karşılaştırılır.
  3. Şema — tablolar ve sütunlar iki veritabanından okunup karşılaştırılır.
  4. Ekranlar — iki sürüm yan yana başlatılır ve gerçek bir tarayıcıyla sayfa sayfa gezilir, yanıt kodu ile yapı karşılaştırılır.

Bu dört geçiş gerçek kusurlar buldu — ikisi her iki sürümü birden ilgilendiriyordu. Onları değerli kılan da bu: ölçmediğiniz bir eşitlik, farkına varmadan yitirdiğiniz bir eşitliktir.

Buna test takımları eklenir: Node tarafında 802, PHP tarafında 572, toplam 1374 durum.

Toutadmin belgeleri — 2026-09-13 tarihinde derlendi. Yazılımdan bağımsız, kendi başına bir site.