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 konsequent app_*-Helper. So laufen dieselben Dateien in jedem Subfolder stabil.

✨ Das Problem in kurz

  • Absolute URLs wie /assets/app.css brechen 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.

Copy to Clipboard

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:

Copy to Clipboard

Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner index.php einfach zuerst _boot.php einbinden – die config.app.php wird 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:

Copy to Clipboard

Regel: Niemals href="/assets/…" schreiben – immer über app_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:

Copy to Clipboard

Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner index.php einfach zuerst _boot.php einbinden – die config.app.php wird 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:

Copy to Clipboard

Und nutze sie in der index.php:

Copy to Clipboard

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:

Copy to Clipboard

Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner index.php einfach zuerst _boot.php einbinden – die config.app.php wird 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:

Copy to Clipboard

Und nutze sie in der index.php:

Copy to Clipboard

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:

Copy to Clipboard

Wenn vorhanden, wird diese Datei vor deinen Includes geladen (z. B. in deiner index.php einfach zuerst _boot.php einbinden – die config.app.php wird von dort gezogen oder du include’st sie selbst).

Mini-Checkliste

  • _boot.php liegt in jeder App unter /public/<app>.

  • Alle URLs/Pfade über app_* Helper bauen.

  • Optional config.app.php für Subpfad/Assets/Export.

  • Keine harten /assets/...-Pfade.

  • Ggf. theme.php für Farben/CSS-Variablen.

Last Updated: 31. August 2025By Tags: , , ,