existenz einer datei prüfen - problem
backbone
- php
hi folks,
hab folgende funktion geschrieben:
function datei($file)
{
if (fopen($file, "r"))
{
echo "$file ... ok\n";
}
else
{
echo "$file ... failed\n";
}
}
datei("/ordner/datei.txt");
nun sollte man ja davon ausgehen das die datei eigentlich geöffnet werden kann und ein ok ausgegeben wird doch dem ist nicht so. nun frag ich mich: wieso? die datei existiert und der ordner auch nur es kommt immer failed... :(
und ich geh auch vom root-web-verzeichnis aus. kann mir jemand helfen?
thx im voraus
tschau
Holladiewaldfee,
if (fopen($file, "r"))
Hat der Webserver Leserechte für die Datei?
Ciao,
Harry
nabend...
Hat der Webserver Leserechte für die Datei?
jo, hat er.
wenn ich das ganze mit http://localhost/ordner/file.txt mache geht ja auch nur so nich.
tschau
Hallo,
wenn ich das ganze mit http://localhost/ordner/file.txt mache geht ja auch nur so nich.
Du hast denke ich ein Problem damit, dass die Ressourcen, auf welche du über HTTP zugreifst, auf deinem Server irgendwo liegen können.
Wenn du auf eine datei über http://localhost/ordner/file.txt zugreifen kannst, dann liegt diese auf dem Dateisystem nicht in /ordner/file.txt
Wahrscheinlicher wäre etwas wie /var/www/ordner/file.txt oder ähnliches. Wo die Datei jetzt aber genau liegt, dass weiß nur derjenige mit Sicherheit, der den Server eingerichtet hat.
Wenn du mit PHP auf eine Datei zugreifst, dann bewegst du dich im Dateisystem des Servers und nicht mehr auf HTTP Ebene. Deshalb sind HTTP Referenzierungen hier auch fehl am Platz.
Viele Grüße,
Stefan
Hallo,
Wahrscheinlicher wäre etwas wie /var/www/ordner/file.txt oder ähnliches. Wo die Datei jetzt aber genau liegt, dass weiß nur derjenige mit Sicherheit, der den Server eingerichtet hat.
Nö nö, so doof ist PHP nicht. Es gibt ja Umgebungsvariablen und Servervariablen. Da würde ich einfah mal mit nem kleinen Testscript reinschauen.
Einfach einen POST oder einen GET auf ein Script mit phpinfo(); oder
<?php #### showvariables.php ####
echo "<pre>";
print_r($_SERVER);
...
echo "/pre>";
?>
Danach bsit Du schlauer. Und die Funktion realpath() ist auch nicht übel.
Grüße
Chris©
Hi!
hab folgende funktion geschrieben:
function datei($file)
[...]
Du kennst die Funktionen is_file() oder auch file_exists()?
Grüße
Andreas
moin!
Du kennst die Funktionen is_file() oder auch file_exists()?
jup, sind mir beide bestens bekannt und beide funktionieren nicht. sie liefern mir immer ein false zurück obwohl die datei existiert.
tschau
Hallo,
und ich geh auch vom root-web-verzeichnis aus. kann mir jemand helfen?
Da scheint der Denkfehler zu stecken. Pack doch die Datei mal ins gleiche Verzeichnis, in dem auch das Script steht. Dann muss der Pfad natürlich lauten: $path="./datei"
Wenn es dann nicht klappt, liest Du dir nochmal genau die Fehlermeldung durch. Und wenn es klappt, kannst Du die datei nach und nach dahin verschieben, wohin sie soll und den Pfad immer brav ändern.
Grüße
Chris©
moin...
Da scheint der Denkfehler zu stecken.
jo, genau das ist auch mein problem. ich kommt mit der pfadangabe nicht klar. kannst mir da vielleicht mal helfen.
http://localhost/phpco.m/help/about.php ist die datei in der der script ausgeführt wird.
und nun will ich prüfen ob alle dateien in phpco.m vorhanden sind. da muss der pfad phpco.m/ doch richtig sein oder nicht?
tschau
hi,
jo, genau das ist auch mein problem. ich kommt mit der pfadangabe nicht klar. kannst mir da vielleicht mal helfen.
http://localhost/phpco.m/help/about.php ist die datei in der der script ausgeführt wird.
und nun will ich prüfen ob alle dateien in phpco.m vorhanden sind. da muss der pfad phpco.m/ doch richtig sein oder nicht?
du befindest dich in innerhalb des verzeichnisses /phpco.m/help
wenn du dort (z.b.) eine normale bilddatei aufrufst, mit src="bild.gif", worauf bezieht sich diese angabe dann?
auf eine datei /phpco.m/help/bild.gif
wenn du dort jetzt einen verzeichnispfad phpco.m/ angibst, worauf bezieht dieser sich dann?
richtig, auf /phpco.m/help/phpco.m/
was musst du also tun?
http://selfhtml.teamone.de/html/allgemein/referenzieren.htm nochmal aufmerksam durchlesen.
gruss,
wahsaga
moin..
was musst du also tun?
http://selfhtml.teamone.de/html/allgemein/referenzieren.htm nochmal aufmerksam durchlesen.
die hab ich mir schon angeschaut nur dadraus werde ich nicht wirklich schlau.
ich hab jetzt also das verzeichnis phpco.m wie folgt: http://localhost/phpco.m/
das script befindet sich im ordner help also: http://localhost/phpco.m/help/about.php
so, und wenn ich jetzt auf eine datei im oberverzeichnis phpco.m zugreifen will muss ich doch ../phpco.m/file.php angeben oder?
thx 4 help
tschau
hi,
ich hab jetzt also das verzeichnis phpco.m wie folgt: http://localhost/phpco.m/
das script befindet sich im ordner help also: http://localhost/phpco.m/help/about.php
so, und wenn ich jetzt auf eine datei im oberverzeichnis phpco.m zugreifen will muss ich doch ../phpco.m/file.php angeben oder?
was steht im verlinkten selfhtml-artikel bezüglich "../"?
zitat: "Mit ../ referenzieren Sie das Verzeichnis über dem aktuellen Verzeichnis, egal wie es heißt."
was liegt bei dir über dem aktuellen verzeichnis (aus der sicht des scriptes about.php)?
richtig, /phpco.m/
und was referenzierst du jetzt _innerhalb_ dieses verzeichnisses?
ein weiteres unterverzeichnis phpco.m, in dem eine datei file.php liegen soll.
läuft also auf /phpco.m/phpco.m/file.php hinaus ...
gruss,
wahsaga
Hallo nochmal,
klappt es inzwischen?
jo, genau das ist auch mein problem. ich kommt mit der pfadangabe nicht klar. kannst mir da vielleicht mal helfen.
http://localhost/phpco.m/help/about.php ist die datei in der der script ausgeführt wird.
Du musst unterscheiden, ob es sich um einen Zugriff innerhalb des lokalen Dateisystems des Servers handelt, oder ob du dem Apachen einen URL über HTTP übergeben hast. Im ersten fall gilt als Wurzelverzeichnis nämlich die Wurzel Deiner Root-Shel bzw. auf dem eigenen Server eben das Wurzelverzeichnis des Servers / .
Im zweiten Fall gilt als Root für die Zugriffe aber die Document-Root, die für den Apachen eingestellt ist.
z.B: Document Root = /usr/local/httpd/htdocs/
Dann entspricht dies dem http://localhost/
Das bedeutet, dass Du für interne Dateizugriffe mittels PHP immer die Document-Root gegen um ihre wirkliche Lage ergänezen musst.
Schau Dir mal die Funktionen realpath(), basename(), dirname() an. damit kann man eine Menge machen.
Grüße
Chris©