Datei-counter soll included werden
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aufruf
ausgeben
beispiel
byte
code
datei
ergebnis
fehlermeldung
file
format
franzose
funktion
gesamt files
log
match
null
ordner
pfad
tun
-
Hallo zusammen,
ich stehe grad vor folgendem Problem: Ich hab eine "count.php" die in einem ordner "pics" liegt, wenn ich sie aufrufe zählt sie alle dateien und rechnet die gesamtdateigröße aus:
(/pics/count.php)
<?php /** #------------------------- Dateien zählen---------------------------- # **/ $jpg_dateien = glob('*.jpg'); $jpgcount = count( (is_array($jpg_dateien) ? $jpg_dateien : NULL) ); $png_dateien = glob('*.png'); $pngcount = count( (is_array($png_dateien) ? $png_dateien : NULL) ); $gif_dateien = glob('*.gif'); $gifcount = count( (is_array($gif_dateien) ? $gif_dateien : NULL) ); $html_dateien = glob('*.html'); $htmlcount = count( (is_array($html_dateien) ? $html_dateien : NULL) ); /** #------------------------- Ordnergrösse ausrechnen---------------------------- # **/ $handle=opendir ('.'); $sum = 0; while (false !== ($file = readdir ($handle))) { //echo $file . " ".filesize($file) . "<br>"; $sum += filesize($file); } closedir($handle); /** #------------------------- Byte umrechnen---------------------------- # **/ function byte_ausrechnen($byte) { if($byte < 1024) { $ergebnis = round($byte, 2). ' Byte'; }elseif($byte >= 1024 and $byte < pow(1024, 2)) { $ergebnis = round($byte/1024, 2).' KByte'; }elseif($byte >= pow(1024, 2) and $byte < pow(1024, 3)) { $ergebnis = round($byte/pow(1024, 2), 2).' MByte'; }elseif($byte >= pow(1024, 3) and $byte < pow(1024, 4)) { $ergebnis = round($byte/pow(1024, 3), 2).' GByte'; }elseif($byte >= pow(1024, 4) and $byte < pow(1024, 5)) { $ergebnis = round($byte/pow(1024, 4), 2).' TByte'; }elseif($byte >= pow(1024, 5) and $byte < pow(1024, 6)) { $ergebnis = round($byte/pow(1024, 5), 2).' PByte'; }elseif($byte >= pow(1024, 6) and $byte < pow(1024, 7)) { $ergebnis = round($byte/pow(1024, 6), 2).' EByte'; } return $ergebnis; } ?>
Das funktioniert soweit auch einwandfrei. Nun include ich diese File in eine intern.php in einem anderem Verzeichnis. Dort möchte diese gezählten Werte aus der count.php ausgeben:
/** #------------------------- Ausgeben ---------------------------- # **/ //echo "JPG-Dateien: ".$jpgcount."<br>"; //echo "PNG-Dateien: ".$pngcount."<br>"; //echo "GIF-Dateien: ".$gifcount."<br>"; //echo "HTML-Dateien: ".$htmlcount."<br>"; //echo "Gesamtgröße: ".byte_ausrechnen($sum);
Jetzt zeigt er mir aber die Werte aus dem Ordner der intern.php an, nicht aus dem /pics Ordner..logisch..aber wie kann ich das verhindern? Bin für jede Hilfe dankbar
Grüße, fannyisfunny -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi!
Am Besten machst du das als Funktion:
function count_files($pfad, &$gesamt) { $dir = dir($pfad); $files = array(); while($v = $dir->read()) { if(!is_dir($pfad.$v) && preg_match('/(.*).(jpg|png|gif|html)$/i', $v, $match)) { $files[$match[2]][$v] = filesize($pfad.$v); $gesamt += $files[$match[2]][$v]; } } $dir->close(); return $files; }
Ist nurn Beispiel. Hab nur gerad keine Zeit das zu testen.
Hier mal nen kürzerer Code zum Byte umrechnen
function byteConvert($bytes) { $s = array('B', 'Kb', 'MB', 'GB', 'TB', 'PB'); $e = floor(log($bytes)/log(1024)); return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e)))); }
Beitrag zuletzt geändert: 24.5.2009 17:07:27 von zenks -
Nicht ganz ;).
function byteConvert($bytes) { $s = array('B', 'Kb', 'MB', 'GB', 'TB', 'PB'); $e = floor(log($bytes)/log(1024)); return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e)))); } function count_files($pfad, &$gesamt) { $dir = dir($pfad); $files = array(); while($v = $dir->read()) { if(!is_dir($pfad.$v) && preg_match('/(.*).(jpg|png|gif|html)$/i', $v, $match)) { $files[$match[2]][$v] = filesize($pfad.$v); $gesamt += $files[$match[2]][$v]; } } $dir->close(); $gesamt = byteConvert($gesamt); return $files; } $files = count_files('/weg/zum/ordner/', $ordnersize); print_r($files); echo $ordnersize;
$files ist ein Array, welches dann zum Beispiel so ausishet:
array('jpg' => array('toll.jpg' => 234, 'schlecht.jpg' => 436346))
und $ordnersize ist dann die gesamte Ordnergröße
Beitrag zuletzt geändert: 24.5.2009 18:13:25 von zenks -
Ah okey, nochmal danke, es scheint ein bisschn zu tun
Allerdings krieg ich damit jetzt folgendes ausgabe (korrekter pfad):
Array ( [png] => Array ( [49805faa3d326.png] => 8752 [49806189ad178.png] => 8752 [49806e5f0a710.png] => // geht dann ne weile so ...] [4a1813eedff30.gif] => 44161 ) ) 207.63 MB
Irgendwie noch nicht ganz das was ich gern hätte... Kannst du mir nochmal weiterhelfen :-)
Grüße, fannyisfunny
Beitrag zuletzt geändert: 24.5.2009 18:40:43 von fannyisfunny -
ähm. ICh dachte das wars was du wolltest ^^. Willst du jetzt genau wissen wieviele Dateien von welchem format oder wie?
-
Genau.. will einfach vier so Vatiablen Dingens GIFs/PNGs/JPGs/HTMLs um die dann weiterverarbeiten zu können...
-
Dann halt das:
function count_files($pfad, &$gesamt) { $dir = dir($pfad); $files = array(); while($v = $dir->read()) { if(!is_dir($pfad.$v) && preg_match('/(.*).([a-z]*)$/i', $v, $match)) { $files[$match[2]]++; $gesamt += filesize($pfad.$v); } } $dir->close(); $gesamt = byteConvert($gesamt); return $files; }
Beitrag zuletzt geändert: 24.5.2009 19:10:37 von zenks -
Dankeee.. Das Files ist jetzt ein Array und ich kann das beliebig machen welche Formate ich angezeigt haben möchte, hab ich das richtig verstanden? Wenn ja, dann müsste das doch so aussehen:
echo $files['png'];
Oder?
Grüße -
oui, c'est ça. Geht jetzt mit allen Dateiformaten so.
-
Nix tun Mr Franzose..
<?phphttp://www.lima-city.de/#:slant: function byteConvert($bytes) { $s = array('B', 'Kb', 'MB', 'GB', 'TB', 'PB'); $e = floor(log($bytes)/log(1024)); return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e)))); } function count_files($pfad, &$gesamt) { $dir = dir($pfad); $files = array(); while($v = $dir->read()) { if(!is_dir($pfad.$v) && preg_match('/(.*).([a-z]*)$/i', $v, $match)) { $files[$match[2]]++; $gesamt += filesize($pfad.$v); } } $dir->close(); $gesamt = byteConvert($gesamt); return $files; } $files = count_files('../pics/', $ordnersize); echo $ordnersize; echo $files['html']; ?>
Sei nochmal so nett.. wenn ich damit reich und mächtig werde hast du acuh was gut bei mir :) -
fannyisfunny schrieb:
Nix tun Mr Franzose..
Versteh ich nicht. Was kommt denn für eine Fehlermeldung? Poste mal das Ergebnis von print_r($files);. Oder was genau funktioniert nicht?
Sei nochmal so nett.. wenn ich damit reich und mächtig werde hast du acuh was gut bei mir :)
Oh vielen Dank xD. -
zenks schrieb:
Versteh ich nicht. Was kommt denn für eine Fehlermeldung? Poste mal das Ergebnis von print_r($files);. Oder was genau funktioniert nicht?
Mit
echo $files['html'];
gibt gar nichts aus. Mit
gibt erprint_r($files);
Array ( [] => 786 ) aus.
-
Der Fehler liegt also bei der $match-Variable. Ich kann mir nur gerade nicht erklären wieso :(
Probiers mal damit:
<?php function byteConvert($bytes) { $s = array('B', 'Kb', 'MB', 'GB', 'TB', 'PB'); $e = floor(log($bytes)/log(1024)); return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e)))); } function count_files($pfad, &$gesamt) { $dir = dir($pfad); $files = array(); while($v = $dir->read()) { if(!is_dir($pfad.$v) && preg_match('/(.*)\.([a-z]*)$/i', $v, $match)) { $files[$match[2]]++; $gesamt += filesize($pfad.$v); } } $dir->close(); $gesamt = byteConvert($gesamt); return $files; } $files = count_files('../pics/', $ordnersize); echo $ordnersize; echo $files['html']; ?>
Wenn das nicht geht poste mal was das ergibt:
<?php function count_files($pfad, &$gesamt) { $dir = dir($pfad); $files = array(); while($v = $dir->read()) { if(!is_dir($pfad.$v) && preg_match('/(.*).([a-z]*)$/i', $v, $match)) { print_r($match); die(); } } $dir->close(); } count_files('../pics/', $ordnersize); ?>
-
zenks schrieb:
Probiers mal damit:
Hi,
vielen Dank für deine Mühe, funktioniert jetzt einwandfrei!
Grüße, fannyisfunny -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage