Relatives Includieren von Bildern

  • Hallo Freunde der Nacht,


    in einem Skript habe ich eine Reihe von Ordnern und PHP-Dateien, welche sich wie üblich hin und her includieren - das klappt alles tadellos. Auch wenn ich mit __FILE__ den Pfad einer includierten Datei ermittle und damit diese Datei von überall einbinden kann.


    Allerdings klappt es nicht, wenn ich Bilder mit ins Spiel bringe. Genauer gesagt, das Problem ist, dass die PHP-Datei, die ich von überall her includieren möchte, ein Pfad zu Bildern benötigt.


    Das Skript liegt zum Beispiel hier:
    demo/skript/includes/beispiel.php


    Und die Bilder liegen in dessen Unterordner:
    demo/skript/includes/images/bild.gif


    Die Datei 'beispiel.php' benötigt einen Pfad um die Datei 'bild.gif' anzuzeigen. Die Datei 'beispiel.php' soll anschließend von überall her includiert werden können, so dass das Bild angezeigt wird.


    Hat jemand eine Idee?


    Schönen Gruß,
    Ravelli

  • Ich sehe 2 Herangehensweisen:


    1. Du definierst ein Bilder-Rootverzeichnis, legst alle Bilder grundsätzlich nur in Unterordnern ausgehend von diesem Ordner an, so dass die beispiel.php weiß, wo der Pfad beginnt und übergibst im Dateinamen des Bildes zusätzlich den relativen Pfad vom Rootordner, oder


    2. Du defnierst jeweils vor dem Include eine Pfadvariable mit dem gerade aktuellen Pfad zum Bild und benutzt diese Variable im Script beispiel.php .

  • Hallo Ihr zwei,


    vielen Dank für Eure Antworten.


    Mit Pfad-Konstanten experimentiere ich schon seit gestern herum. Ich versuche dabei, den Pfad einer INI-Datei des Skriptes und der aufrufenden Datei über die Server-Variablen zu ermitteln. Für die INI-Datei allein klappt es. Allerdings bekomme ich keinen eindeutigen Pfad der aufrufenden Datei, bzw. beide Pfadangaben gehen von einer unterschiedlichen Wurzel aus.


    __FILE__ liefert für das einzubindende Skript:
    /homepages/abc/d123456/htdocs/def/skript/demo/frontend/guestbook.php


    SCRIPT_FILENAME liefert für die aufrufende Datei:
    /kunden/homepages/abc/d123456/htdocs/def/skript/demo/frontend_test.php


    Es handelt sich um Webspace bei 1&1. Allerdings soll das Skript nicht nur bei 1&1 funktionieren, sondern möglichst überall.


    Oder meint Ihr, die Verzeichnisse als String in der INI-Datei definieren? Das würde ich lieber umgehen.


    Schönen Gruß,
    Ravelli

  • hier mal ein Beispiel was ich nutze:


    PHP
    1. /************************************************************************/
    2. /* PATHS
    3. /************************************************************************/
    4. define('FK_S', ((strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') ? '\\' : '/'));
    5. define('FK_PATH',realpath(dirname(__FILE__).FK_S.".."));
    6. define('FK_TMPDIR',FK_PATH .'/tmp/');


    und dann

    PHP
    1. include_once(FK_PATH."/lang/de/lang.php");
  • Nun habe ich eine vorläufige Lösung gefunden, die dann funktioniert, wenn die aurufende Datei in einem höheren Verzeichnis liegt.


    Den Installations-Pfad definiere ich in der INI-Datei:

    PHP
    1. $GigKalenderPath = __FILE__;
    2. $GigKalenderPath = str_replace('gigkalender.ini','', $GigKalenderPath);
    3. $GigKalenderPath = str_replace($_SERVER['DOCUMENT_ROOT'], '', $GigKalenderPath);
    4. $GigKalenderPath = str_replace('\\','/', $GigKalenderPath);
    5. if ($GigKalenderPath{0}!='/') { $GigKalenderPath = '/'.$GigKalenderPath; }
    6. define ("PATH",$GigKalenderPath);


    Den relativen Pfad zu den Bildern ermittel ich vorläufig so:


    Der Vorschlag von 'steffenk' sieht mir danach aus, dass es nur die Skripte bzw. Include-Dateien korrekt einbinden würde. Das ging bei mir bisher auch problemlos.


    Über den Vorschlag von 'ingozen' muss ich mal meditieren was er damit wohl meinen mag... *grübel* ;-)


    Es ist spät, ich habe zweite Tage nichts gegessen, daher sage ich erstmal gute Nacht und danke für Eure Ideen,
    Ravelli

  • Ingozen meint, wenn um es um den Bildpfad geht für <img ...>, reicht es, ein / voranzustellen. :D

    My software never has bugs. It just develops random features ... :D
    [FONT="System"]&#63743;
    » DevShack - die Website des freien Webentwicklers Boris ;)

  • meist wird ja beides gebraucht, der Pfad für die URL und der absolute Pfad bei Bildmanipulationen / Fileoperationen.


    Ich mach das meistens ganz einfach so:


    define('SYSTEM', '/tanzpartner/systemdata/');
    define('SYSTEM_WORKDIR', $_SERVER['DOCUMENT_ROOT'] . SYSTEM);


    Ersteres für URLs, das Zweite für alles "interne" :D

    My software never has bugs. It just develops random features ... :D
    [FONT="System"]&#63743;
    » DevShack - die Website des freien Webentwicklers Boris ;)

  • Hallo zusammen,


    da bin ich wieder. Ich habe mich nun mal von Euch überreden lassen, in der INI-Datei doch einen Pfad direkt anzugeben. Bisher wollte ich ja, dass dieser automatisch ermittelt wird.


    In der datei 'gigkalender.ini' steht nun:

    PHP
    1. $GigKalenderPath = "/gigkalender/";
    2. define ("PATH", $GigKalenderPath);


    $GigKalenderPath ist hier der Installations-Ordner des gesamten Skriptes relativ vom Domain-Root.


    In der einzubindenden Datei steht dann zum einbinden der Bilder zb.:

    PHP
    1. <img src="'.PATH.'frontend/images/url.gif" alt="" border="0" />


    So klappt es nun zufriedenstellend!
    Danke für Eure Hilfe!!!


    Einen schönen Tag,
    Ravelli