You are not logged in.

  • Login

1

Friday, December 16th 2011, 8:37pm

PHP - Mehrere Verzeichnisse auslesen und Bilder zählen

Hallo zusammen,

ich würde gerne mehrere Verzeichnisse auslesen und den Inhalt (Bilder) zählen.

Aktueller Code:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
foreach ($ordner as $ordnere) {
    $handle = opendir($ordnere);
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $sub = substr($file, -4);
            if ($sub == ".png" || $sub == ".jpg" || $sub == ".gif" || $sub == ".bmp") {
                $filecount = count(glob($ordnere.$file));
                echo $filecount;
            }
        }
    } 
}
?>


Bekomme aber nur die Ausgabe:
11111111111111111111111111111111111111111111111111111111

2

Saturday, December 17th 2011, 10:56am

Hi,
du willst doch pro Ordner, die Anzahl an Bildern?
Dann musst du ENTWEDER über die Dateien iterieren und die Dateiendungen prüfen ODER mit glob auf irgendein Pattern matchen (keine regulären Ausdrücke).
Du machst beides und deswegen kommen natürlich nur 1er raus.

Lösung:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function getNumberOfItemsForFolder($ordnere, $pattern) {
	$filecount = 0;
 
	$handle = opendir($ordnere);
	while (false !== ($file = readdir($handle))) {
		if (!$pattern || preg_match($pattern, $file)) {
			$filecount++;
		}
	}
 
	return $filecount;
}
 
$pattern = '/\.(png|jpg|gif|bmp)$/';
$ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
foreach ($ordner as $ordnere) {
	echo $ordnere. ":". getNumberOfItemsForFolder($ordnere, $pattern) . "\n";
}

3

Saturday, December 17th 2011, 11:07am

Hi,

möchtest du alle Einträge zusammenzählen, oder pro Order die Bilder zählen?

Wenn du alle zusammenzählen möchtest, dann würde dir zu der Funktion scandir raten. Die Ergebnisarrays kannst du dann komplett mergen.

PHP Quellcode

1
2
3
4
5
$resultArray = array();
$ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
foreach ($ordner as $o) {
    $resultArray = array_merge($resultArray,scandir($o));
}


Schau dir das Array mittels var_dump einfach an. Nun brauchst du nurnoch einen Filter um deine gewünschte Eintrage herauszufiltern. Den Inhalt der Filterfunktion hast du ja schon richtig bei dir implementiert.

PHP Quellcode

1
2
3
4
5
$resultArray = array_filter($resultArray, function($file) { 
     $sub = strtolower(substr($file, -4));
     if ($sub == ".png" || $sub == ".jpg" || $sub == ".gif" || $sub == ".bmp")
          return $file;
});


Am Ende brauchst du nur noch ein count auf dein Array setzen.

PHP Quellcode

1
echo count($resultArray);

4

Saturday, December 17th 2011, 12:34pm

Du kannst auch mit glob arbeiten, was nicht schlechter ist.

5

Saturday, December 17th 2011, 1:35pm

Ich habe es nun endlich geschafft.
Das Script tut nun das was es soll.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$folderImgCount=0;
$ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
foreach ($ordner as $ordnere) {
 
    $handle = opendir($ordnere);
    while (false !== ($file = readdir($handle))) {
 
        if ($file != "." && $file != "..") {
 
            $sub = end(explode('.',$file));    
            if ($sub == "png" || $sub == "jpg" || $sub == "jpeg" || $sub == "gif" || $sub == "bmp") $folderImgCount++;
        }
    }
    closedir($handle);
}
    echo 'Es wurden heute '.$folderImgCount.' Bilder erstellt';
    $folderImgCount=0;
?>

Danke an ALLE!

Similar threads

Social bookmarks