Verschiedene Werte in __DIR__ für HTTP und CLI?

  • Ich habe festgestellt, dass die Konstanten __DIR__, __FILE__ und ähnliche verschiedene Werte haben, je nachdem ob man die Datei via URL aufruft (HTTP), oder sie per SSH direkt auf dem Server ausführt (CLI).

    Über HTTP ist __DIR__ beispielsweise "/var/www/vhosts/hosting123456.abcde.netcup.net/httpdocs", wenn ich die Datei per CLI ausführe, ist __DIR__ nur "/httpdocs".

    Das Problem ist, dass bei mir die Config gecacht wird. In der Config wird für einige Werte __DIR__ genutzt, beim Cachen wird die Konstante aufgelöst. Wenn ich den Cache über HTTP erstellen lasse, steht der lange Pfad drin, und der Cache funktioniert für HTTP, CLI kann den Pfad aber nicht mehr auflösen. Andersrum das gleiche: Mit CLI den Cache erstellt landet der kurze Pfad drin, und HTTP kann den nicht mehr auflösen.

    Die Frage: Wieso bekomme ich verschiedene Pfade, obwohl es sich um dieselbe Datei handelt? Und kann ich das irgendwie (über eine Einstellung etc.) anpassen?


    (Falls es wichtig ist: Ich habe Webhosting2000.)

  • Ändern kannst Du dieses Verhalten leider nicht. Du kannst aber Deine PHP-Anwendung patchen und z.B. php_sapi_name() abfragen.

    Beispiel: https://forum.netcup.de/anwendung/sons…lahm/#post72720

    Generell ist es eine schlechte Idee, absolute Pfade in Cachedateien zu verwenden. Allerdings eine weit verbreitete, weil es halt vieles vereinfacht… :|

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

  • Generell ist es eine schlechte Idee, absolute Pfade in Cachedateien zu verwenden. Allerdings eine weit verbreitete, weil es halt vieles vereinfacht… :|

    Ich werde mal schauen, ob ich alle absoluten Pfade aus den gecachten Dateien rausbekomme. Falls das nicht funktioniert, kann ich auf php_sapi_name() zurückgreifen und die Dateien doppelt cachen lassen.

    bei PHP nehm ich in der Regel getcwd()

    getcwd() hat das gleiche Verhalten wie __DIR__: Unter CLI ist es ein anderer Pfad als mit HTTP. Insofern ändert das nix am Problem.

  • __DIR__ != getcwd()

    zumindest mal auf das include verhalten generell.

    Code
    chdir('something');
    echo getcwd()."\n";
    echo dirname(__FILE__)."\n";

    so und jetzt mal zurück zu deinem CLI, schonmal aus einem anderen verzeichniss folgendes gemacht

    # php /var/www/vhosts/hosting123456.abcde.netcup.net/httpdocs/datei.php

    macht nämlich bei mir ohne das chdir beispiel hier oben 2 unterschiedliche ausgaben auf CLI ebene.

    ich weis nicht wie der prompt configuriert ist, ob da der absolute pfad oder nur das aktuelle verzeichniss vor deinem # steht

    jeder der einen Schreibfehler in meinem Post findet, darf ihn Kommentarlos behalten

    P.S. gilt auch für Schignaturen ;)