PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateioperationen mit PHP (copy & Co)


Haka
26.10.2005, 14:48:07
Seit kurzem befasse ich mich mit PHP-Dateioperationen. (Kopieren, anzeigen, löschen usw...).
Dazu habe ich zwei Fragen:
1. Gibt es unter PHP eine Kopierfunktion für ganze Verzeichnisäste à la xcopy bei DOS?
2. Ein Testprogramm (aus einem Buch) soll alle Einträge eines Verzeichnisses anzeigen und zusätzlich entscheiden, ob es sich bei einem Eintrag um eine Datei oder um ein Verzeichnis handelt.
Das Testprogramm sieht folgendermaßen aus:

<?php
$hdl=opendir ('../Kurse');
echo "Verzeichnis-Handle: $hdl\n";
while ($res = readdir ($hdl))
{
if (is_dir ($res))
{
echo "\n<br>Verzeichnis - ".$res;
}
else
{
echo "\n<br>Datei - ".$res;
}
}
closedir($hdl);
?>


Bei mir zeigt er jedoch alles als “Datei” an. Was ist da bloß los?

feuervogel
26.10.2005, 16:43:43
willkommen im forum!

es müsste heißen

is_dir( '../Kurse/' . $res )

schätze ich mal.

vt1816
26.10.2005, 16:53:55
Seit kurzem befasse ich mich mit PHP-Dateioperationen. (Kopieren, anzeigen, löschen usw...).
Dazu habe ich zwei Fragen:
1. Gibt es unter PHP eine Kopierfunktion für ganze Verzeichnisäste à la xcopy bei DOS?
2. Ein Testprogramm (aus einem Buch) soll alle Einträge eines Verzeichnisses anzeigen und zusätzlich entscheiden, ob es sich bei einem Eintrag um eine Datei oder um ein Verzeichnis handelt.
Das Testprogramm sieht folgendermaßen aus:

<?php
$hdl=opendir ('../Kurse');
echo "Verzeichnis-Handle: $hdl\n";
while ($res = readdir ($hdl))
{
if (is_dir ($res))
{
echo "\n<br>Verzeichnis - ".$res;
}
else
{
echo "\n<br>Datei - ".$res;
}
}
closedir($hdl);
?>


Bei mir zeigt er jedoch alles als “Datei” an. Was ist da bloß los?
Ergebnis des Testprogramms:

Verzeichnis-Handle: Resource id #1
Verzeichnis - .
Verzeichnis - ..
Datei - index.php
Datei - test_2004_09_30.php
Datei - test_2004_09_29.php
Datei - test_2004_12_16.phpWas soll da los sein ?

xabbuh
26.10.2005, 17:54:30
Was soll da los sein ?
Hast du als Verzeichnis das Verzeichnis genommen, in dem auch das Script liegt?

meikel (†)
26.10.2005, 20:09:34
Was soll da los sein ?
is_dir() erwartet genauso wie file_exists() und is_file() nicht den Bezeichner sondern einen Pfad.

Pfad absolut (Beispiel):
is_dir("/srv/www/htdocs/userverzeichnis/html/unterverzeichnis/$name")

Pfad relativ (Beispiel):
is_dir("./unterverzeichnis/$name")

vt1816
27.10.2005, 12:27:10
Hast du als Verzeichnis das Verzeichnis genommen, in dem auch das Script liegt?Nein.

<?php
$hdl=opendir ('../test4');
echo "Verzeichnis-Handle: $hdl\n";
while ($res = readdir ($hdl))
{
if (is_dir ($res))
{
echo "\n<br>Verzeichnis - ".$res;
}
else
{
echo "\n<br>Datei - ".$res;
}
}
closedir($hdl);
?> also Pfad relativ, >>Verweis entfernt, siehe unten<<

xabbuh
27.10.2005, 13:27:28
Dann existieren die Dateien in beiden Verzeichnissen?

meikel (†)
27.10.2005, 13:50:03
EDIT:
<?php
$hdl=opendir ('../test4');
echo "Verzeichnis-Handle: $hdl\n";
while ($res = readdir ($hdl))
{
if (is_dir ($res))
In $res steht kein Pfad sondern nur ein Bezeichner. Damit ist das Ergebnis von is_dir() immer falsch.

So wäre es richtig:
if (is_dir ('../test4/' . $res))

vt1816
27.10.2005, 14:32:59
Verflucht! Warum liest Du nicht das, was ich geschrieben hatte, und reagierst darauf?! ??? - wer lesen kann ist klar im Vorteil - die Antwort war ja nicht auf Deinen Beitrag.

Der Unterschied liegt mitunter im Detail. Hatte bis jetzt kein weiteres Unterverzeichnis. Daher fiel es auch nicht auf, da './' und '../" ja als Verzeichnisse erkannt wurden. >> Verweis wegen Missbrauch entfernt << (ohne und mit Pfad) wird der Unterschied jetzt deutlicher.

meikel (†)
27.10.2005, 17:13:07
EDIT:

??? - wer lesen kann ist klar im Vorteil - die Antwort war ja nicht auf Deinen Beitrag.
Jou. Allerdings unterscheiden sich die Antworten nur unwesentlich von der Ausgangsfrage..

------------
EDIT:
Das Script ist falsch.

Der Unterschied liegt mitunter im Detail. Hatte bis jetzt kein weiteres Unterverzeichnis.
Noch mal:
alle Funktionen, die auf das Dateisystem zugreifen, erwarten IMMER EINEN PFAD und nicht das, was readdir() liefert. readdir() ermittelt nur den Text des Verzeichniseintrages. Das ist aber nicht die Pfadangabe, die zB. is_dir() erwartet!

is_dir('verzeichnis') => immer falsch, weil die Zeichenkette kein Pfad ist
is_dir('./verzeichnis') => nur dann falsch, wenn es kein Verzeichnis ist