login  Naam:   Wachtwoord: 
Registreer je!
 Forum

aantal jpg bestanden, GB, albums tellen

Offline Meulenhof - 15/07/2010 15:10 (laatste wijziging 15/07/2010 15:29)
Avatar van MeulenhofLid Nu ben ik met een statistieken pagina. Ik wil de cijfers zo goed mogelijk weergeven.

Op de stats pagina wil ik aantal foto's weer laten geven.
Hoeveel GB er aan foto's aanwezig is.
Hoeveel albums (dit kan tevens uit database worden gehaald, ipv op map naam).

De mappen structuur is al volgt
ROOT/fotos/2010/albummap/thumbs/foto1.jpg
ROOT/fotos/2010/albummap/thumbs/foto2.jpg
ROOT/fotos/2010/albummap/foto1.jpg
ROOT/fotos/2010/albummap/foto2.jpg

ROOT/fotos/2009/albummap/thumbs/foto1.jpg
ROOT/fotos/2009/albummap/thumbs/foto2.jpg
ROOT/fotos/2009/albummap/foto1.jpg
ROOT/fotos/2009/albummap/foto2.jpg

ROOT/fotos/2009/albummap1/thumbs/foto1.jpg
ROOT/fotos/2009/albummap1/thumbs/foto2.jpg
ROOT/fotos/2009/albummap1/thumbs/foto3.jpg
ROOT/fotos/2009/albummap1/foto1.jpg
ROOT/fotos/2009/albummap1/foto2.jpg
ROOT/fotos/2009/albummap1/foto3.jpg

Wat moet de teller aangeven bij het bovenstaande voorbeeld
Albums: 3 (dit kan ook vanuit de db op worden gevraagd)
Aantal foto's: 7
Verbruikte opslag: 23 MB

Het enige dat ik weet is dat je per map uit kan lezen (en dat is niet bepaald flexibel)

echo (count(scandir(fotos/2009/albummap1'))-2);

Aantal foto's: 7
Verbruikte opslag: 23 MB

Ik zou niet weten waar ik moet beginnen om het te realiseren. En als het mij al zou lukken dan zou ik niet weten hoe ik het flexibel moet maken (dus als ik een map upload hij automatisch de fotos erbij gaat tellen)

Hij moet ook thumb.db uitsluiten anders klopt de telling niet.

3 antwoorden

Gesponsorde links
Offline WouterPSV - 16/07/2010 00:51 (laatste wijziging 16/07/2010 01:31)
Avatar van WouterPSV Lid misschien is het eerst record wel iets?








voor als je het niet vind:::
...
of
...
Offline svm - 16/07/2010 08:27 (laatste wijziging 16/07/2010 12:20)
Avatar van svm PHP ver gevorderde Ik heb het niet getest, maar dit zal ongeveer wel de bedoeling zijn.
Pas het zelf eventueel aan; zo wordt de grootte bijvoorbeeld een bytes terug gegeven.

  1. <?php
  2. $map = "ROOT/fotos"; //hoofdmap van de albums/fotos
  3.  
  4. function countPics($dir=$map) {
  5.  
  6. $counter = array("files" => 0, "dirs" => 0, "size" => 0); // aanmaken variabel
  7.  
  8. $dr = opendir($dir);
  9. while(($read = readdir($dr) !== FALSE)) {
  10. if(is_dir($dir.'/'.$read) && $read != "thumbs" && $read != "." && $read != "..") { //de puntbestanden (. eigen map; .. vorige map) worden aangezien als mappen; thumbs wordt ook gefilterd
  11. $counter['dirs']++; // map erbij optellen
  12. countPics($dir.'/'.$read);
  13. }elseif(is_file($dir.'/'.$read) && $read != "thumb.db"){
  14. $counter['files']++;
  15. $counter['size'] += filesize($dir.'/'.$read);
  16. }
  17. }
  18. closedir($dr);
  19.  
  20. return $counter;
  21. }
  22.  
  23. $info = countPics();
  24. var_dump($info);
  25. ?>


Edit:
Nou is php best snel, maar als het om enkele GB's gaat kun je beter dit script eenmalig uitvoeren en het resultaat in een database zetten.
Vervolgens elke keer wanneer je een foto upload of album aanmaakt dit in de record op laten tellen; het script dan kun je tussendoor nog eens uitvoeren om alles nauwkeurig na te tellen (mocht je bijvoorbeeld wat in je files hebben zitten rommelen).
Voorbeeld van een tabel:
  1. CREATE TABLE `albumstats` (
  2. type VARCHAR(6) NOT NULL,
  3. waarde BIGINT UNSIGNED NOT NULL DEFAULT '0',
  4. )TYPE=MyISAM;
  5.  
  6. INSERT INTO `albumstats` (type) VALUES ("files"),("albums"),("size")
Bedankt door: Meulenhof
Offline xSc - 16/07/2010 21:44
Avatar van xSc Onbekend Als je logische mappen/bestandenstructuur gebruikt, is het ook handig om de functie glob() te gebruiken. Deze functie geeft namelijk een array terug met bestanden/mappen, die aan het opgegeven pattern voldoen (je kunt ook gebruik maken van *). Het aantal elementen kun je tellen met count(). Dat is de meest makkelijke manier. Let er wel op dat glob() false teruggeeft wanneer er geen enkel(e) bestand/map aan jouw criteria voldoet.

Ik ben het met svm eens dat je dat je dergelijk script bij elk verzoek moet uitvoeren. Je kunt een cronjob instellen (elke goede hostingprovider biedt dit aan) en het script elke zoveel minuten laten uitvoeren. In dit geval kun je ook in je database bijhouden of een bepaalde map is gewijzigd. Zo niet, dan behoeft het script ook niet alles opnieuw te berekenen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s