Größe von mehrern Unterordnern herausfinden | Fehlermeldung beim Unterordner nicht aber beim "normalen" Ordner
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abklappern
angabe
auftreten
bedenken
befehl
beleg
erg
funktion
lustiges thema
manual
meist
minute
paar echo
parameter
platzen
real
rekursion
space
unfehlbarkeit
zweck
-
Guten Abend liebe Lima City Community! :)
Ich w?rde gerne den verbrauchten Platz von meinem Lima Account festestellen.
Dazu habe ich ein Script ein wenig umgeschrieben.
Das Script funtzt auch wunderbar, wenn ich das "HIER" weglasse.
Wenn ich es aber aufrufe, um auch die Unterordner zu erfassen, dann kommen folgende Fehlermeldungen :
Warning: filetype() [function.filetype]: Lstat failed for fotos in C:\server\htdocs\platz.php on line 61
Leider wei? ich damit nichts anzufangen.
php.net spuckt auch nichts vern?nftiges aus.
function open ($dir, $size = '0') { $d = opendir ($dir); while (($file = readdir ($d)) !== false) { if ($file != '.' && $file != '..') { $pfad = $dir.$file; if (filetype ($file) === 'dir') { $pfad .= '/'; printf ('DIR : %s<br/>', $pfad); $size = open ($pfad, $size); // <-------- HIER } else { printf ('FILE : %s<br/>', $pfad); $size += filesize ($pfad); } } } closedir ($d); return $size; } $size = open ('i-cms/', '0'); $size_mb = round ($size / 1024 / 1024, '5'); printf ('Es werden %s MB belegt', $size_mb);
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hat keiner eine Idee?
-
Deklariert wird er ja durch den Aufruf der Funktion.
Ich habe es mit der ?bergabe der Gr??e so gemacht, man k?nnte den auch einfach jedes mal per "global" in die Funktion "reinholen".
Beitrag ge?ndert am 18.07.2005 23:00 von lucas9991 -
Hiho!
Rekursion in PHP ist ein lustiges Thema.
Ich glaube nicht, dass der Fehler an der Stelle "HIER" auftritt. Ich w?rde eher auf den filetype()-Befehl tippen. Denn die Fehlermeldung faselt etwas von "lstat filed". F?ge in deinen Quellcode doch mal ein paar echo()-Befehle (oder printf()'s) ein, die dir deine Variablen ausgeben. Zum Beispiel dein zusammengesetzter Pfadname k?nnte nicht mit dem realen Pfadnamen ?bereinstimmen.
Na gut, heute mal die [соdе]-Blocks:
function open ($dir, $size = '0') { printf("dir: [[%s]]<br />", $dir); $d = opendir ($dir); while (($file = readdir ($d)) !== false) { if ($file != '.' && $file != '..') { $pfad = $dir.$file; printf("pfad: [[%s]]<br />", $pfad); printf("file: [[%s]]<br />", $file); if (filetype ($file) === 'dir') { ...
Und ich w?rde sagen, dass filetype() den ganzen Pfad ($dir.$file?) als Parameter verlangt, nicht nur das letzte Teilst?ck ($file?).
MfG
alopex
Beitrag ge?ndert am 19.07.2005 13:30 von alopex -
alopex schrieb:
Hiho!
Rekursion in PHP ist ein lustiges Thema.
Ich glaube nicht, dass der Fehler an der Stelle 'HIER' auftritt. Ich w?rde eher auf den filetype()-Befehl tippen. Denn die Fehlermeldung faselt etwas von 'lstat filed'. F?ge in deinen Quellcode doch mal ein paar echo()-Befehle (oder printf()'s) ein, die dir deine Variablen ausgeben. Zum Beispiel dein zusammengesetzter Pfadname k?nnte nicht mit dem realen Pfadnamen ?bereinstimmen.
Habe ich bereits vor der Er?ffnung des Thread gemacht.
Na gut, heute mal die [соdе]-Blocks:
Kuhl!
Und ich w?rde sagen, dass filetype() den ganzen Pfad ($dir.$file?) als Parameter verlangt, nicht nur das letzte Teilst?ck ($file?).
So habe ich es doch geschrieben! ^^
Au?erdem funktioniert das Script ja einwandfrei bis auf die Unterordner...
-
B?h, gro?er CMS-Meister!
Komm mal ein bisschen von deiner Unfehlbarkeit herunter. Wenn sich dein engster Fanclub schon die M?he macht, deine Codes zu durchforsten, dann solltest du das auch tun:
$size = open ($_SERVER['DOCUMENT_ROOT'].'/html/tpl', '0'); $size_mb = round ($size / 1024 / 1024, '5'); printf ('Es werden %s MB belegt', $size_mb); function open ($dir, $size = '0') { $d = opendir ($dir); while (($file = readdir ($d)) !== false) { if ($file != '.' && $file != '..') { // hier hast du den Slash vergessen!!! $pfad = $dir.'/'.$file; // hier hast du nicht den ganzen Pfad // angegeben!!! if (filetype ($pfad) === 'dir') { $pfad .= '/'; printf ('DIR : %s<br/>', $pfad); $size = open ($pfad, $size); } else { printf ('FILE : %s<br/>', $pfad); $size += filesize ($pfad); } } } closedir ($d); return $size; }
Dscheggsd es?
Jetzt funktioniert es einwandfrei mit Unterordnern.
Deinen Startpfad musst du nat?rlich selber wieder geradebiegen.
BTW: K?nntest du das bitte um eine Angabe in Bytes und KibiBytes oder kBytes erg?nzen? Und das Ganze in eine sch?ne Funktion verpacken? Das kann man immer mal brauchen ...
MfG
alopex
P.S.: Daf?r habe ich jetzt 15 Minuten meines kostbaren Lebens geopfert ... -
B?h, gro?er CMS-Meister!
Komm mal ein bisschen von deiner Unfehlbarkeit herunter. Wenn sich dein engster Fanclub schon die M?he macht, deine Codes zu durchforsten, dann solltest du das auch tun:
Sry, wenn das so r?ber kam.
Herzlichen Dank, das mein lieber Fanclub sich darum k?mmert!
$size = open ($_SERVER['DOCUMENT_ROOT'].'/html/tpl', '0'); $size_mb = round ($size / 1024 / 1024, '5'); printf ('Es werden %s MB belegt', $size_mb); function open ($dir, $size = '0') { $d = opendir ($dir); while (($file = readdir ($d)) !== false) { if ($file != '.' && $file != '..') { // hier hast du den Slash vergessen!!! $pfad = $dir.'/'.$file; // hier hast du nicht den ganzen Pfad // angegeben!!! if (filetype ($pfad) === 'dir') { $pfad .= '/'; printf ('DIR : %s<br/>', $pfad); $size = open ($pfad, $size); } else { printf ('FILE : %s<br/>', $pfad); $size += filesize ($pfad); } } } closedir ($d); return $size; }
Dscheggsd es?
Jetzt funktioniert es einwandfrei mit Unterordnern.
Juppee :D
Deinen Startpfad musst du nat?rlich selber wieder geradebiegen.
BTW: K?nntest du das bitte um eine Angabe in Bytes und KibiBytes oder kBytes erg?nzen? Und das Ganze in eine sch?ne Funktion verpacken? Das kann man immer mal brauchen ...
MfG
alopex
Sonst nochwas?
Ich werds mich n?chste Woche drum k?mmern! :)
P.S.: Daf?r habe ich jetzt 15 Minuten meines kostbaren Lebens geopfert ...
Herzlichen Danke schlauer liebenswerter Fux! xD -
Hiho!
Anscheinend hilft es, wenn man dich ab und zu mal anschei?t ...
Auf
http://de.php.net/manual/de/function.filesize.php
befinden sich auch 'ne Menge Beispiele f?r das rekursive Abklappern von Verzeichnissen zum Zwecke der Dateigr??enbestimmung. Einige sehen k?rzer aus als dein Code. Allerdings wei? ich nicht, ob sie auch funktionieren ...
Und, hast du schon mal
http://de.php.net/manual/de/function.disk-total-space.php
gesehen?
Das d?rfte das Gleiche in einem Befehl erledigen ...
Es gilt auch zu bedenken, dass die mit filesize() ermittelte Gr??e nicht unbedingt die Gr??e des belegten Festplattenspeichers angibt. Dateien belegen Festplatten in Bl?cken oder Clustern (mehrere Bl?cke). Au?erdem speichern "moderne" Filesysteme gerne auch noch zus?tzliche Daten "unsichtbar" in "alternative data streams". Die vergr??ern alle den ben?tigten Platz, sind aber mit filesize() nicht zu ermitteln.
MfG
alopex -
alopex schrieb:
Hiho!
Anscheinend hilft es, wenn man dich ab und zu mal anschei?t ...
Auf
http://de.php.net/manual/de/function.filesize.php
befinden sich auch 'ne Menge Beispiele f?r das rekursive Abklappern von Verzeichnissen zum Zwecke der Dateigr??enbestimmung. Einige sehen k?rzer aus als dein Code. Allerdings wei? ich nicht, ob sie auch funktionieren ...
Und, hast du schon mal
http://de.php.net/manual/de/function.disk-total-space.php
gesehen?
Das d?rfte das Gleiche in einem Befehl erledigen ...
Es gilt auch zu bedenken, dass die mit filesize() ermittelte Gr??e nicht unbedingt die Gr??e des belegten Festplattenspeichers angibt. Dateien belegen Festplatten in Bl?cken oder Clustern (mehrere Bl?cke). Au?erdem speichern 'moderne' Filesysteme gerne auch noch zus?tzliche Daten 'unsichtbar' in 'alternative data streams'. Die vergr??ern alle den ben?tigten Platz, sind aber mit filesize() nicht zu ermitteln.
MfG
alopex
Ja, ist ja gut! :p
Ich habe noch ein sch?nes Script (auch Seite) dazu gefunden.
http://aidan.dotgeek.org/lib/?file=function.dirsize.php
Dort gibt es interessante Scripts.
z.B. Highlighting (?) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage