# PHP findet eine Datei lokal, auf LIVE aber nicht – welcher Pfad ist eigentlich relativ wozu? Canonical page: https://blame76.com/snippets/php/2026-09-17-php-findet-eine-datei-lokal-auf-live-aber-nicht-welcher-pfad-ist-eigentlich-relativ-wozu/ Category: Snippets Type: PHP Published: 2026-09-17 Updated: 2026-09-17 Tags: php, path, cwd, include, deployment Lokal funktioniert `require '../config/app.php'`, auf LIVE kommt `failed to open stream`. Die Datei existiert – nur der relative Ausgangspunkt ist ein anderer. ## Das Problem sichtbar machen ```php __DIR__, 'cwd' => getcwd(), 'include_path' => get_include_path(), ]); ``` `__DIR__` ist an die Datei gebunden, in der der Ausdruck steht. `getcwd()` hängt vom Prozess und Aufrufkontext ab. Gerade CLI, CGI/FPM und Apache können sich beim aktuellen Working Directory unterschiedlich verhalten. ## Robuster Pfad für Projektstruktur Statt vom Working Directory aus zu navigieren: ```php $config = require dirname(__DIR__, 2) . '/config/app.php'; ``` Damit ist der Pfad relativ zum Quellcode selbst. Vor dem Require kann eine Diagnose helfen: ```php $path = dirname(__DIR__, 2) . '/config/app.php'; var_dump($path, is_file($path), is_readable($path)); ``` ## Wenn `is_file()` true und `is_readable()` false ist Dann ist der Pfad korrekt, aber Rechte/Ownership sind das nächste Problem. Wenn schon `is_file()` false ist, zuerst Deployment-Pfad und DocumentRoot prüfen. Der wichtige Unterschied: **Pfadproblem und Rechteproblem sehen beim `require` ähnlich aus, brauchen aber völlig andere Lösungen.**