login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Too many open files

Offline Frederic - 02/06/2006 20:49
Avatar van FredericPHP ver gevorderde Ik wil graag volgend script uitvoeren:

  1. <?
  2.  
  3. function leesmappen( $map ) {
  4. $i = 0;
  5. $open = opendir( $map );
  6. while( ( $file = readdir( $open ) ) !== false ) {
  7. if( is_dir( $file ) === true ) {
  8. leesmappen($file);
  9. } elseif( is_file( $file ) === true ) {
  10. $c = count(file($file));
  11. $i = $i + $c;
  12. fclose($file);
  13. }
  14. }
  15. closedir($open);
  16. return $i;
  17. }
  18.  
  19. echo leesmappen('./');
  20. ?>


Nu, iedere keer als ik het uitvoer krijg ik volgende foutmeldingen:

Warning: opendir(.): failed to open dir: Too many open files in .....

Warning: readdir(): supplied argument is not a valid Directory resource in .....

Warning: closedir(): supplied argument is not a valid Directory resource in .....

En dat terwijl ik maar een tiental files erop heb staan...
Het probleem is, dat dezelfde bestanden steeds worden herhaald...
Ik krijg bvb 100 meldingen (terwijl er maar 10 bestanden zijn), gewoon omdat er oneindig veel keer per bestand wordt geprobeerd (tenzij ik op esc duw)

Kan iemand me verder helpen?

11 antwoorden

Gesponsorde links
Offline Tuinstoel - 02/06/2006 21:17
Avatar van Tuinstoel PHP expert if( is_dir( $file ) === true ) {
Misschien zorgt dit voor je oneindige loop? Haal === true eens weg.
Offline Frederic - 02/06/2006 21:40
Avatar van Frederic PHP ver gevorderde Nog altijd hetzelfde probleem...
Offline Richard - 02/06/2006 21:45
Avatar van Richard Crew algemeen Je moet ook controleren of de dir '.' of '..' is. Deze worden namelijk ook valid gezien, en zorgen dus voor oneindige loops.
Offline Frederic - 02/06/2006 21:46
Avatar van Frederic PHP ver gevorderde Nog steeds dezelfde fouten

  1. <?php
  2.  
  3. function leesmappen( $map ) {
  4. $i = 0;
  5. $fp = opendir( $map );
  6. while( ( $file = readdir( $fp ) )) {
  7. if( is_dir( $file ) && ($file != '.' || $file != '..')) {
  8. leesmappen( $file );
  9. } elseif( is_file( $file )) {
  10. $c = count(file($file));
  11. $i = $i + $c;
  12. fclose($file);
  13. }
  14. }
  15. closedir( $fp );
  16. return $i;
  17. }
  18. ?>
Offline Rens - 02/06/2006 21:47
Avatar van Rens Gouden medaille

Crew algemeen
  1. ($file != '.' || $file != '..')

Die || moet je && van maken.
  1. ($file != '.' && $file != '..')
Offline Richard - 02/06/2006 21:48
Avatar van Richard Crew algemeen zet overigens ook nog $map voor de $file, anders is de directory verkeerd^^
Offline Frederic - 02/06/2006 21:53 (laatste wijziging 02/06/2006 22:00)
Avatar van Frederic PHP ver gevorderde Ok, alles werkt, behalve de submappen

  1. <?
  2. function leesmappen( $map ) {
  3. $i = 0;
  4. $fp = opendir( $map );
  5. while( ( $file = readdir( $fp ) )) {
  6. if( is_dir($map.$file.'/') && $file != '.' && $file != '..') { //HIER
  7. leesmappen($map.$file.'/');
  8. } elseif( is_file( $file )) {
  9. $c = count(file($file));
  10. $i = $i + $c;
  11. fclose($file);
  12. }
  13. }
  14. closedir( $fp );
  15. return $i;
  16. }
  17.  
  18. echo leesmappen('/usr/local/psa/home/vhosts/mijndomein.be/httpdocs/');
  19.  
  20. ?>
Offline haytjes - 02/06/2006 22:30 (laatste wijziging 02/06/2006 22:30)
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
  1. <? leesmappen($map.$file.'/');


moet dat niet

  1. <? leesmappen($map."/".$file.'/');


zijn?
Offline Frederic - 02/06/2006 22:58
Avatar van Frederic PHP ver gevorderde Neen, omdat achter $map (/usr/local/psa/home/vhosts/mijndomein.be/httpdocs/) al een / staat 
Offline Richard - 02/06/2006 23:05
Avatar van Richard Crew algemeen Dan moet je m daar dus weghalen... anders worden andere directories niet goed gedaan;-)
Offline Frederic - 02/06/2006 23:08 (laatste wijziging 02/06/2006 23:24)
Avatar van Frederic PHP ver gevorderde
  1. <?
  2. function leesmappen($map) {
  3. $i = 0;
  4. $fp = opendir( $map );
  5. while( ( $file = readdir( $fp ) )) {
  6. if( is_dir($map.'/'.$file) && $file != '.' && $file != '..') {
  7. leesmappen($map.'/'.$file);
  8. } elseif( is_file( $file )) {
  9. $c = count(file($map.'/'.$file));
  10. echo $map.'/'.$file.': '.$c.'<br />';
  11. $i = $i + $c;
  12. }
  13. }
  14. closedir( $fp );
  15. return $i;
  16. }
  17.  
  18. echo leesmappen('/usr/local/psa/home/vhosts/mijndomein.be/httpdocs');
  19. ?>

Yes, het lukt bijna!
Nu alleen nog 1 probleem: hij telt de getallen van in de submappen er neit bij. Dit komt omdat als ik in de eerste if terrecht kom, ik de functie opnieuw uitvoer op de submappen, en erbij $i weer op 0 zet... Hoe kan ik dit voorkomen?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.256s