Subdir-safe PHP: Apps zuverlässig in Unterordnern betreiben (inkl. Helper & Demo)
Subdir-safe PHP: Apps zuverlässig in Unterordnern betreiben (inkl. Helper & Demo)
Wenn du PHP-Apps oder Dokumentationen unter /public/<app> betreiben willst (z. B. /public/test, /public/docs/doc1, …), stolperst du schnell über kaputte Pfade:
Assets laden nicht, Includes zeigen ins Leere, und bei mehreren Instanzen (doc1, doc2, doc3) wird’s ganz wild. Dieser Artikel zeigt einen robusten, wiederverwendbaren Ansatz, der in beliebigen Unterordnern funktioniert – ohne harte /assets/...-Pfade.
TL;DR
Definiere zur Laufzeit APP_FS_BASE (Dateisystem-Basis) und APP_URL_BASE (URL-Basis) der aktuellen App und nutze konsequentapp_*-Helper. So laufen dieselben Dateien in jedem Subfolder stabil.
✨ Das Problem in kurz
- Absolute URLs wie
/assets/app.cssbrechen in Subdirs (/test/…), weil sie immer vom Domain-Root ausgehen. - Relative Includes sind fragil, wenn Skripte aus verschiedenen Verzeichnissen aufgerufen werden.
- Mehrere Instanzen derselben App (
/docs/doc1,/docs/doc2, …) benötigen dieselbe Codebasis mit unterschiedlicher Base.
Ziel: Ein Satz Helper, der immer die richtigen Pfade/URLs erzeugt – pro App-Unterordner, ohne Rumgehacke.
Die Lösung: _boot.php mit Base & Helpern
Lege in jeder App (also in /public/) eine _boot.php ab. Sie erkennt die Base automatisch und stellt saubere Helper bereit.
Was das bringt:
Egal ob deine App unter /, /test, /docs/doc2 liegt – app_url('css/app.css') erzeugt immer die korrekte URL zu deiner App und asset_path('css/app.css') den korrekten FS-Pfad.
Optional: config.app.php (Overrides)
Falls du Dinge fest verdrahten willst (z. B. hinter einem Reverse Proxy oder in Shared-Hosting-Setups), lege eine config.app.php neben die _boot.php:
Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner
index.phpeinfach zuerst_boot.phpeinbinden – dieconfig.app.phpwird von dort gezogen oder du include’st sie selbst).
Demo: index.php – subdir-safe im Alltag
In deiner App-index.php genügt ein require '_boot.php'; – danach hast du alles, was du brauchst:
Regel: Niemals
href="/assets/…"schreiben – immer überapp_asset_url(...)gehen. Sonst bricht’s in/test& Co.
Optional: config.app.php (Overrides)
Falls du Dinge fest verdrahten willst (z. B. hinter einem Reverse Proxy oder in Shared-Hosting-Setups), lege eine config.app.php neben die _boot.php:
Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner
index.phpeinfach zuerst_boot.phpeinbinden – dieconfig.app.phpwird von dort gezogen oder du include’st sie selbst).
Optionales Theme: includes/theme.php + CSS-Variablen
Willst du Farben zentral konfigurieren, lege eine includes/theme.php in deiner App an:
Und nutze sie in der index.php:
So bleiben Farben themed, ohne dass du Pfade riskierst.
Optional: config.app.php (Overrides)
Falls du Dinge fest verdrahten willst (z. B. hinter einem Reverse Proxy oder in Shared-Hosting-Setups), lege eine config.app.php neben die _boot.php:
Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner
index.phpeinfach zuerst_boot.phpeinbinden – dieconfig.app.phpwird von dort gezogen oder du include’st sie selbst).
Optionales Theme: includes/theme.php + CSS-Variablen
Willst du Farben zentral konfigurieren, lege eine includes/theme.php in deiner App an:
Und nutze sie in der index.php:
So bleiben Farben themed, ohne dass du Pfade riskierst.
Optional: config.app.php (Overrides)
Falls du Dinge fest verdrahten willst (z. B. hinter einem Reverse Proxy oder in Shared-Hosting-Setups), lege eine config.app.php neben die _boot.php:
Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner
index.phpeinfach zuerst_boot.phpeinbinden – dieconfig.app.phpwird von dort gezogen oder du include’st sie selbst).
Mini-Checkliste
-
_boot.phpliegt in jeder App unter/public/<app>. -
Alle URLs/Pfade über
app_*Helper bauen. -
Optional
config.app.phpfür Subpfad/Assets/Export. -
Keine harten
/assets/...-Pfade. -
Ggf.
theme.phpfür Farben/CSS-Variablen.