Laravel 8 Anwendung kann Pfade nicht mehr auflösen?

  • Hi,


    ich hab eine frische Laravel 8 Anwendung auf meinem Webhosting 4000 installiert. Ich hab eine ältere Laravel 5.8 ohne Probleme zum laufen bekommen. Bei der neuen Laravel 8 version, kriege ich allerdings folgende Fehlermeldung, nachdem ich composer installiert habe, Hosting pfad zeigt auf /public/ folder, artisan key:generate und artisan storage:link ausgeführt habe:


    Code
    Warning: file_exists(): open_basedir restriction in effect. File(/var/www/vhosts/***.netcup.net/httpdocs/monitor.adam-nielsen.de/public/../storage/framework/maintenance.php) is not within the allowed path(s): (/var/www/vhosts/***.netcup.net/httpdocs/monitor.adam-nielsen.de/public/:/tmp/:/var/lib/php/sessions:/var/www/vhosts/hosting***.netcup.net/tmp) in /var/www/vhosts/***.netcup.net/httpdocs/monitor.adam-nielsen.de/public/index.php on line 25
    
    Warning: require(): open_basedir restriction in effect. File(/var/www/vhosts/hosting***.netcup.net/httpdocs/monitor.adam-nielsen.de/vendor/autoload.php) is not within the allowed path(s): (/var/www/vhosts/hosting***.netcup.net/httpdocs/monitor.adam-nielsen.de/public/:/tmp/:/var/lib/php/sessions:/var/www/vhosts/hostin***.netcup.net/tmp) in /var/www/vhosts/***.netcup.net/httpdocs/monitor.adam-nielsen.de/public/index.php on line 40


    Einziges ähnliches Thema im Forum dazu scheint das hier zu sein: https://forum.netcup.de/anwend…open-basedir-und-symlink/ aber da wollte der User den Storage ordner außerhalb seiner Laravelanwendung packen und die mit einem eigenen Symlink verknüpfen, er schrieb auch, wenn er den storage ordner dort lässt geht es.


    Seit Laravel 8 steht in der index.php folgendes drin:


    Code
    if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
        require $maintenance;
    }


    Das war in Laravel 5.8 noch nicht, deswegen geht die Anwendung vermutlich.

    Das wird dann zu `/var/www/vhosts/hosting***.netcup.net/httpdocs/monitor.adam-nielsen.de/public/../storage/framework/maintenance.php ` aufgelöst. Müsste das nicht lesbar sein? Beim `open_basedir ` ist `{DOCROOT}{/}{:}{TMP}{/}{:}{/}var{/}lib{/}php{/}sessions{:}{WEBSPACEROOT}{/}tmp `. Oder ist Laravel 8 nicht mehr nutzbar auf Netcup's Webhosting Paketen?

  • Elenktik

    Hat den Titel des Themas von „Laravel Anwednung kann Pfade nicht auflösen?“ zu „Laravel 8 Anwendung kann Pfade nicht mehr auflösen?“ geändert.
  • Beim `open_basedir ` ist `{DOCROOT}{/}{:}{TMP}{/}{:}{/}var{/}lib{/}php{/}sessions{:}{WEBSPACEROOT}{/}tmp `. Oder ist Laravel 8 nicht mehr nutzbar auf Netcup's Webhosting Paketen?

    Du musst die andere Einstellung wählen bei den PHP-Einstellungen, mit {WEBSPACEROOT} am Anfang. document root ist ja der public-Ordner und aus dem gehst du ja mit '/../' raus. Mit der anderen Einstellung ist allerdings der gesamte Webspace für PHP zugreifbar, man kann also andere installierte Anwendungen nicht vor deiner Laravel Anwendung absichern. Das ist schon ein Wermutstropfen, man hat die Nachteile von open_basedir, aber nicht die zusätzliche Sicherheit, für die es eigentlich gedacht ist.

  • Super danke, dass hat geklappt. Ich hatte die andere Einstellung auch schon vorher ausprobiert, aber dann vermutlich nicht lange genug gewartet bis sie übernommen wurde.

  • Hallo....

    ich ahbe ebenfalls eine Problem mit lavarel, bin da ber newbie, wollte nur den webshop von bagisto testen ...

    mod_fcgid: stderr: PHP Fatal error: Uncaught ErrorException: file_exists(): open_basedir restriction in effect. File(/bagisto/resources/views/errors/500.blade.php) is not within the allowed path(s): (/var/www/vhosts/hosting171047.ae861.netcup.net/:/tmp/:/var/lib/php/sessions) in /var/www/vhosts/hosting171047.ae861.netcup.net/bagisto/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:30

    hast Du hinweise für mich?


    Vielen Dank

  • Lies zwei Beiträge über deinem. Deine Fehlermeldung ist ja klar und eindeutig. Mehr als die open_basedir Einstellung in den PHP-Einstellungen auf die o.g. Variante zu stellen kannst du im Webhosting im Hinblick auf open_basedir Probleme nicht tun. Wenn das nicht ausreicht, dann bist du "out of luck", wie man so schön sagt. Wie sieht denn die Verzeichnisstruktur aus und was ist das Dokumentenstamm-Verzeichnis (sollte vermutlich sein "/bagisto/public")? Wobei mir der absolute Pfad in der Fehlermeldung etwas komisch vorkommt (/bagisto/...), wie hast du es denn installiert? Oder kommt bagisto mit der chroot-Umgebung nicht klar?

  • Ich bin auf euren Post gestoßen, weil ich im Grunde mit ner Laravel 10 Applikation dasselbe Problem habe.


    Meine open_basedir restriction allerdings ist schon auf hosting gestellt und nicht auf das docroot


    was ich auch nicht verstehe:

    $app->storagePath('logs'); gibt mir den richtig Pfad aus: /var/www/vhosts/hosting188525.ae8d6.netcup.net/knirps.index23.de/httpdocs/storage/logs


    Allerdings fliegt am Ende doch ne Exception:

    Code
    is_dir(): open_basedir restriction in effect. File(/knirps.index23.de/httpdocs/storage/logs) is not within the allowed path(s): (/var/www/vhosts/hosting188525.ae8d6.netcup.net/:/tmp/:/var/lib/php/sessions)

    und was mich daran wundert ist:

    pwd auf der Shell spuckt mir auch diesen /knirps.index23.de/httpdocs/storage/logs pfad aus …

    Der Support ist leider nicht wirklich in der Lage, hier zu helfen - sehr bedauerlich. Aber vielleicht von euch noch einer ne Idee, wo Laravel da falsch abbiegt.


    Ich würd's ja mit xdebug und ner Remote Session testen, aber: DAS GEHT JA AUCH NICHT 😄 und lokal läuft alles super durch 🙄


    Auf dem Hosting hab ich auch schon den storage path in der config/logging.php hart verdrahtet … keine chance.


    Bei dem scheiß OPCache weiß ich auch nie, ob DER am Ende schuld ist, dass es so aussieht, als würde alles nicht funktionieren 🙄!



    Habt ihr noch irgendwelche Ideen?

  • riconeitzel Hinweis am Rande: Über SSH bist Du in einer Chroot-Umgebung, deswegen ist der Pfad unterschiedlich. Über HTTP aufgerufen ist es immer der volle /var/… Pfad.


    Sofern möglich kann man maximal mit __DIR__ und relativen Pfaden arbeiten, um es unter beiden Umgebungen nutzen zu können. Ob das bei Deinem Problem weiterhilft, weiß ich aber nicht.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    2 Mal editiert, zuletzt von KB19 ()

  • Meine aktuelle Vermutung ist, dass mit dieser chroot-Schummelei unter Plesk da irgendwas zusammenfällt, was am Ende zu diesem Fehler führt … falls ich wider Erwarten doch noch was finden sollte, schreibe ich nochmal hier!


    Danke Dir :)