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.)

  • Als ganz dreckige Lösung könntest du einfach für die CLI einen Symlink anlegen

    ChestSort: Automatische Kistensortierung in Minecraft - www.chestsort.de


    www.jeff24.de | RS2000 Plus, VPS2000 Plus, 2xVPS500, 2xVPS200, EiWoMiSau

  • Als ganz dreckige Lösung könntest du einfach für die CLI einen Symlink anlegen

    Wohl eher nicht :D (Auch weil es ja nur die eine Hälfte des Problems lösen würde, aber sobald CLI mal den Cache neu erstellt, funktioniert es wieder nicht richtig). Trotzdem Danke für den Vorschlag ;)

  • Ä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/anwend…%C3%A4che-lahm/#post72720


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

  • 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
    1. chdir('something');
    2. echo getcwd()."\n";
    3. 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 ;)