Marc Reichelt: Include bereitet mir Probleme

Hallo an alle,

ich habe ein kleines Problem in PHP und komme einfach nicht auf die Lösung.
So sieht meine Ordnerstruktur aus:

./eins.php
./includes/zwei.php
./includes/log.txt

Die Datei eins.php includet die Datei zwei.php, die im Unterordner "includes" liegt, und ruft danach eine kleine Funktion auf:

include("./includes/zwei.php");  
log("Fehlerausgabe");

Die Funktion log wurde vorher in Datei zwei.php wie folgt definiert:

function log($str)  
{  
 $fn = @fopen("./log.txt", "a");  
 if($fn)  
 {  
  /* ... */  
 }  
}

Damit versucht die Funktion, eine Datei "log.txt" im Hauptordner zu erstellen - und nicht im Unterordner "includes". Eine Änderung von "./log.txt" auf "./includes/log.txt" bewirkt das was ich erreichen möchte, aber das ist mir etwas zu blöd. Ist es möglich, das aktuelle Verzeichnis der _includeten_ Datei irgendwie abzufragen, und die Datei nur dort zu öffnen - unabhängig vom Ort der Datei die die Funktion benutzt?

Vielen Dank im Voraus für eure Hilfe, und gute Nacht!

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
http://emmanuel.dammerer.at/selfcode.html
  1. Hi!

    Die Funktion log wurde vorher in Datei zwei.php wie folgt definiert:

    function log($str)

    {
    $fn = @fopen("./log.txt", "a");
    if($fn)
    {
      /* ... */
    }
    }

    
    >   
    > Damit versucht die Funktion, eine Datei "log.txt" im Hauptordner zu erstellen - und nicht im Unterordner "includes". Eine Änderung von "./log.txt" auf "./includes/log.txt" bewirkt das was ich erreichen möchte, aber das ist mir etwas zu blöd. Ist es möglich, das aktuelle Verzeichnis der \_includeten\_ Datei irgendwie abzufragen, und die Datei nur dort zu öffnen - unabhängig vom Ort der Datei die die Funktion benutzt?  
      
    `$path = dirname( __FILE__);`{:.language-php}  
      
    siehe: <http://de2.php.net/manual/de/language.constants.predefined.php>  
      
      
    Grüße  
    Andreas
    
    -- 
    SELFHTML Tipps & Tricks: <http://aktuell.de.selfhtml.org/tippstricks/>
    
    1. Hallo Andreas,

      $path = dirname( __FILE__);

      siehe: http://de2.php.net/manual/de/language.constants.predefined.php

      Danke für den Tipp, klappt wunderbar! Diese magische Konstante ist wirklich zauberhaft...

      Grüße und eine gute Nacht

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
  2. Moin!

    Damit versucht die Funktion, eine Datei "log.txt" im Hauptordner zu erstellen - und nicht im Unterordner "includes".

    Was ja nicht weiter verwunderlich ist, weil deine Pfadangabe "im aktuellen Pfad die Datei log.txt" sagt. Und der aktuelle Pfad im Skript "eins.php" ist eben der dieses Skriptes.

    Eine Änderung von "./log.txt" auf "./includes/log.txt" bewirkt das was ich erreichen möchte, aber das ist mir etwas zu blöd.

    Du hast genau zwei Möglichkeiten der Verzeichnisangabe: Relativ (wie jetzt) oder absolut. Und weil absolute Pfadangaben nicht "irgendwo" hinzeigen sollen, sondern nach Möglichkeit erreichbar im eigenen vhost-Bereich, empfiehlt es sich, den Pfad mittels $_SERVER['DOCUMENT_ROOT'] zu bilden.

    • Sven Rautenberg
  3. Hallo Marc,

    fürge zu Deiner Funktion einen optinalen Parameter hinzu:

      
    function log($eintrag,$inc_pfad='./')  
       {  
       if($fn=fopen($inc_pfad."log.txt", "a"))  
          {  
          # Dein Steuerfluß  
          return(TRUE);  
          }  
       return(FALSE);  
       }  
    
    

    Gruß aus Berlin!
    eddi

    1. Hello,

      Schreib in die Include-Datei:

      $_path = pathinfo(__FILE__);               ## Das ist der Pfad, in dem die Datei steht
      $dateiname = $_path['dirname'].'/log.txt'; ## Name der Logdatei

      Wenn Du das nun includest, wird die Logdatei immer dort gesucht, wo das includete File selber gestanden hat.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau