login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Verkeerde functie

Offline Frederic - 04/06/2005 22:47 (laatste wijziging 04/06/2005 22:48)
Avatar van FredericPHP ver gevorderde Kan iemand me zeggen waarom dit 0 blijft geven als resultaat, terwijl het eigenlijk toch wel een hoger getal moet zijn?
  1. <?php
  2. function map_meten($map){
  3. $grootte = 0;
  4. $dir = opendir($map);
  5.  
  6. while(FALSE !==($bestand = readdir($dir))){
  7. if ($bestand != "." && $bestand != "..") {
  8. if(is_file($bestand)){
  9. $grootte = $grootte + filesize($map.$bestand);
  10. }
  11. elseif(is_dir($bestand)){
  12. $grootte = $grootte + map_meten($bestand);
  13. }
  14.  
  15. }
  16. }
  17. closedir($dir);
  18. return $grootte;
  19. }
  20. ?>
  21.  
  22. ..........
  23.  
  24. <?php map_meten("bestanden/");
  25. echo $grootte ?>

Het dient om een mapgrootte en submappen te maken op mijn site, maar dat lukt niet echt:o

18 antwoorden

Gesponsorde links
Offline DRUNK - 05/06/2005 01:31
Avatar van DRUNK PHP gevorderde Wat gebeurd er als je <?php echo map_meten('./bestanden/'); ?> gebruikt?
Zoals je het nu gebruikt zal het namelijk nooit gaan werken, $grootte zit in de functie deze wordt terug gegeven en zal je dus direct kunnen printen (echo'en) of je kunt hem in een andere var zetten:
  1. <?php
  2.  
  3. $grootte = map_meten('./bestanden/');
  4. print $grootte;
  5.  
  6. ?>
Offline nemesiskoen - 05/06/2005 09:48
Avatar van nemesiskoen Gouden medaille

PHP expert
als je een int of double functie maakt moet je ook de waarde die je terugstuurt opvangen. Je kan alleen de functie los aanroepen als het een void functie is!
Offline Frederic - 05/06/2005 11:22 (laatste wijziging 05/06/2005 12:23)
Avatar van Frederic PHP ver gevorderde
Citaat:
als je een int of double functie maakt moet je ook de waarde die je terugstuurt opvangen. Je kan alleen de functie los aanroepen als het een void functie is!

Beetje verduiddelijking svp? 
@Drunk: ik krijg nog steeds gewoon '0' als uitkomst!
Offline Legolas - 05/06/2005 12:35
Avatar van Legolas Onbekend Zet $grootte als global, want anders is hij niet buiten de functie te gebruiken!
Verder kan ik geen enkele fout bespeuren...

Btway die filesize is in bytes;-)
Offline DRUNK - 05/06/2005 13:32
Avatar van DRUNK PHP gevorderde Maak van $grootte = 0; eens static $grootte = 0; Als je $grootte niet static maakt zal deze bij elke recursieve aanroep van je functie weer op 0 gezet worden. Als deze var static is zal deze alleen de eerste keer op 0 gezet worden en later zal de toegewezen waarde behouden blijven, voorbeeldje:
  1. <?php
  2.  
  3. function dirSize($dir) {
  4. if ($dir{strlen($dir)-1} != '/')
  5. $dir .= '/';
  6.  
  7. if (!$dh = dir($dir))
  8. die('Kan '.$dir.' niet openen!');
  9.  
  10. static $size = 0;
  11.  
  12. while (false !== ($file = $dh->read())) {
  13. if ($file != '.' && $file != '..') {
  14. if (is_dir($dir.$file))
  15. $size += dirSize($dir.$file);
  16.  
  17. else $size += filesize($dir.$file);
  18. }
  19. }
  20. $dh->close();
  21. return $size;
  22. }
  23.  
  24. print dirSize('./fotos');
  25.  
  26. ?>
Offline nemesiskoen - 05/06/2005 13:33
Avatar van nemesiskoen Gouden medaille

PHP expert
dan moet hij wel al met php5 werken. Want in PHP 4 bestaat static niet.
Offline DRUNK - 05/06/2005 13:54
Avatar van DRUNK PHP gevorderde static is ook gewoon aanwezig in PHP4 net als global maar dan werkt het anders.
Offline Frederic - 05/06/2005 14:13 (laatste wijziging 05/06/2005 14:13)
Avatar van Frederic PHP ver gevorderde Dit zou dan normaal toch just moeten zijn? niet?
  1. <?php
  2. global $grootte;
  3. function map_meten($map){
  4. $grootte = 0;
  5. $dir = opendir($map);
  6.  
  7. while(FALSE !==($bestand = readdir($dir))){
  8. if ($bestand != "." && $bestand != "..") {
  9. if(is_file($bestand)){
  10. $grootte = $grootte + filesize($map.$bestand);
  11. }
  12. elseif(is_dir($bestand)){
  13. $grootte = $grootte + map_meten($bestand."/");
  14. }
  15.  
  16. }
  17. }
  18. closedir($dir);
  19. return ($grootte / 1048576);
  20. }
  21. echo map_meten('gebruikers/bestanden/');
  22. ?>

Ik krijg nog steeds 0 als resultaat...
Pas ik $grootte = 0 aan naar bvb $grootte = 8, dan echo't ie 8
Offline DRUNK - 05/06/2005 14:25
Avatar van DRUNK PHP gevorderde ja, omdat $grootte niet 'static' is ...
Offline Frederic - 05/06/2005 14:53 (laatste wijziging 05/06/2005 15:04)
Avatar van Frederic PHP ver gevorderde
  1. <?php
  2. static $grootte;
  3. function map_meten($map){
  4. $grootte = 0;
  5. $dir = opendir($map);
  6.  
  7. while(FALSE !==($bestand = readdir($dir))){
  8. if ($bestand != "." && $bestand != "..") {
  9. if(is_file($bestand)){
  10. $grootte = $grootte + filesize($map.$bestand);
  11. }
  12. elseif(is_dir($bestand)){
  13. $grootte = $grootte + map_meten($bestand."/");
  14. }
  15.  
  16. }
  17. }
  18. closedir($dir);
  19. return ($grootte / 1048576);
  20. }
  21. echo map_meten('gebruikers/bestanden/');
  22. ?>

Geeft nog steeds 0 
Offline MothZone - 05/06/2005 15:08 (laatste wijziging 05/06/2005 15:09)
Avatar van MothZone PHP ver gevorderde en dit?

  1. <?php
  2. static $grootte;
  3. function map_meten($map){
  4. $grootte = 0;
  5. $dir = opendir($map);
  6.  
  7. while($bestand = readdir($dir)){
  8. if ($bestand != "." && $bestand != "..") {
  9. if(is_file($bestand)){
  10. $grootte = $grootte + filesize("./".$map.$bestand);
  11. }
  12. elseif(is_dir($bestand)){
  13. $grootte = $grootte + map_meten("./".$map.$bestand."/");
  14. }
  15.  
  16. }
  17. }
  18. closedir($dir);
  19. return ($grootte / 1048576);
  20. }
  21. echo map_meten('gebruikers/bestanden/');
  22. ?>
Offline Frederic - 05/06/2005 15:25
Avatar van Frederic PHP ver gevorderde Damn, nog steeds: 0...
Offline MothZone - 05/06/2005 15:35
Avatar van MothZone PHP ver gevorderde vervang die ./ die ik er bij mij heb toegevoegd eens door het volledige pad naar je map:s
Offline Frederic - 05/06/2005 16:52
Avatar van Frederic PHP ver gevorderde Vreemd genoeg ook niets...
Of kent iemand een ander script om mappen en submappen te meten?
Offline Legolas - 05/06/2005 16:56
Avatar van Legolas Onbekend
  1. <?php
  2. static $grootte;
  3. function map_meten($map){
  4. $dir = opendir($map);
  5. while(false !==($bestand = readdir($dir))){
  6. if ($bestand != "." && $bestand != "..") {
  7. if(is_file($bestand)){
  8. $grootte = $grootte + filesize($map.$bestand);
  9. }
  10. elseif(is_dir($bestand)){
  11. $grootte = $grootte + map_meten($bestand."/");
  12. }
  13. }
  14. }
  15. closedir($dir);
  16. return ($grootte / 1048576);
  17. }
  18. echo map_meten('gebruikers/bestanden/');
  19. ?>

Je zet bij het begin v/d functie grootte steeds op 0, dan gebeurt er natuurlijk niks hè:p
Offline Maarten - 05/06/2005 17:01
Avatar van Maarten Erelid @Legodoos: als je niet weet wat je zegt zwijg dan.
Offline Frederic - 05/06/2005 21:44
Avatar van Frederic PHP ver gevorderde Nu heb ik dit:
  1. <?php
  2. function map_meten($map){
  3. $grootte = 0;
  4. $dir = opendir($map);
  5.  
  6. while($bestand = readdir($dir)){
  7. if ($bestand != "." && $bestand != "..") {
  8. if(is_dir($bestand))
  9. {
  10. $grootte = $grootte + mapmeten($map.$bestand."/");
  11. }
  12. else
  13. {
  14. $grootte = $grootte + filesize($map.$bestand);
  15. }
  16. }
  17. }
  18. return $grootte;
  19. }
  20. $mapgrootte = map_meten('gebruikers/bestanden/');
  21. echo ($mapgrootte / 1048576)." MB"; ?>

De grootte van de bestanden in gebruikers/bestanden/ worden netjes weergegeven, maar wat er in de submappen zit komt er niet bij! In mijn ogen ziet het er toch goed uit?
Offline DRUNK - 06/06/2005 03:08
Avatar van DRUNK PHP gevorderde kijk eens op http://www.php.net/filesize/ hier ergens tussen de 'user comments' staat een link, klick daar op en zie: 'een site met code'. Deze site is van een persoon met erg veel PHP/programmeer kennis, probeer hier eens wat te vinden.

De kunst van het programmeren is niet vragen hoe het moet, maar het vallen en opstaan lijkt er meer op ;)

Lees je code en zie wat er fout aan is, zie je de fout niet ... herschrijf het!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.293s