Include bereitet mir Probleme
![](/uploads/default_avatar/thumb/missing.png)
- php
1 Andreas Korthaus0 Sven Rautenberg0 XaraX0 Tom
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/
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/>
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/
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.
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
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