login  Naam:   Wachtwoord: 
Registreer je!
 Forum

recursief folder lezen

Offline roy - 13/04/2009 13:52 (laatste wijziging 13/04/2009 13:53)
Avatar van royPHP gevorderde Hey allemaal,

Ik wil recursief een map uitlezen, dus ook de mappen in die map. De bestanden die erin staan moeten in een array komen.

Op 1 of andere manier wil het niet lukken. Ziet iemand wat ik fout doe?

zo roep ik de functie aan:
  1. echo '<pre>'. print_r($cCore->getItemsFromFolder($ROOTDIR . 'js', 0), 1) .'</pre>';


de functie:
  1. function getItemsFromFolder($dir, $i)
  2. {
  3. $listDir = array();
  4. if($handle = opendir($dir)) {
  5. while(($read = readdir($handle)) !== false) {
  6. if ($read != "." && $read != ".."){
  7. if(is_file($dir."/".$read)) {
  8. echo $i . $read."<br>\n";
  9. $listDir[$i] = $dir ."/". $read;
  10. $i++;
  11. }
  12. elseif(is_dir($dir."/".$read)){
  13. echo $i . $read."<br>\n";
  14. $this->getItemsFromFolder($dir."/".$read, $i++);
  15.  
  16. }
  17.  
  18. }
  19. //$i++;
  20. }
  21.  
  22. closedir($handle);
  23.  
  24. }
  25. return $listDir;
  26. }


dit is momenteel het resultaat:
Array
(
[0] => /var/www/html/cms/js/test.js
[2] => /var/www/html/cms/js/jquery-1.3.2.min.js
)

mappen structuur:
-js
--login
---test
test2.js
--test
test3.js
test.js


bij voorbaat dank.
Roy

11 antwoorden

Gesponsorde links
Offline Joost - 13/04/2009 13:58
Avatar van Joost PHP expert
  1. function getItemsFromFolder($dir, $i)
  2. {
  3. if(!isset($listDir)){
  4. static $listDir = array();
  5. }
  6. if($handle = opendir($dir)) {
  7. while(($read = readdir($handle)) !== false) {
  8. if ($read != "." && $read != ".."){
  9. if(is_file($dir."/".$read)) {
  10. $listDir[$i] = $dir ."/". $read;
  11. $i++;
  12. }
  13. elseif(is_dir($dir."/".$read)){
  14. return $this->getItemsFromFolder($dir."/".$read, $i++);
  15.  
  16. }
  17.  
  18. }
  19. //$i++;
  20. }
  21.  
  22. closedir($handle);
  23.  
  24. }
  25. return $listDir;
  26. }

Zonder te testen denk ik dat deze het klusje wel klaart 
Offline Koen - 13/04/2009 13:59
Avatar van Koen PHP expert Misschien heb je hier wat aan:
http://www.site...mp;id=1582
Offline roy - 13/04/2009 20:01 (laatste wijziging 13/04/2009 22:54)
Avatar van roy PHP gevorderde script een beetje aangepast:

  1. function getItemsFromFolder($dir, $i)
  2. {
  3. if(!isset($listDir)){
  4. static $listDir = array();
  5. }
  6. if($handle = opendir($dir)) {
  7. while(($read = readdir($handle)) !== false) {
  8. if ($read != "." && $read != ".." && $read != "main.js" && $read != "jquery-1.3.2.min.js"){
  9. if(is_file($dir."/".$read)) {
  10. $listDir[$i] = str_replace('/var/www/html/cms','',$dir ."/". $read);
  11. $i++;
  12. }
  13. elseif(is_dir($dir."/".$read)){
  14. return $this->getItemsFromFolder($dir."/".$read, $i++);
  15. }
  16. }
  17. }
  18. closedir($handle);
  19. }
  20. return $listDir;
  21. }


mapstructuur:
-js
--ajaxRequest
ajaxrequest.js
--login
login.js
--menu
menu.js

main.js

resultaat nu:
Array ( [0] => /js/ajaxRequest/ajaxRequest.js )

ik roep de functie zo aan:
  1. $dir = $cCore->getItemsFromFolder($ROOTDIR . 'js', 0);



ik wil de alle JS bestanden in een array.. nu pakt ie alleen de eerste... weet iemand wat er verkeerd gaat???
Offline Joost - 13/04/2009 21:40
Avatar van Joost PHP expert
  1. return $this->getItemsFromFolder($dir."/".$read, $i++);

=>
  1. $listDir[$i] = $this->getItemsFromFolder($dir."/".$read, $i++);

Ik kan het helaas niet testen nu, maar je zult uiteindelijk maar 1 array moeten returnen, en nu return je telkens de functie weer.
Offline roy - 13/04/2009 22:46 (laatste wijziging 13/04/2009 23:43)
Avatar van roy PHP gevorderde neej, als het een directorie is dan moet ie niet in de array komen

iemand??
Offline Richard - 14/04/2009 10:25
Avatar van Richard Crew algemeen Wat dacht je van...

  1. $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
  2. foreach($files as $name => $file){
  3. echo "$name\n";
  4. }
Offline roy - 14/04/2009 13:18 (laatste wijziging 14/04/2009 14:15)
Avatar van roy PHP gevorderde uhm.. is dat een standaard functie van php?
Maar ik wil alleen de .js bestanden in de array hebben..


Ik ga het proberen als ik vanavond thuis ben.
Offline Koen - 14/04/2009 14:57
Avatar van Koen PHP expert Filter die er dan uit?
Offline roy - 14/04/2009 20:24
Avatar van roy PHP gevorderde Hoe kan je de .js files er dan uit filteren??

Offline henver - 14/04/2009 21:16 (laatste wijziging 14/04/2009 21:26)
Avatar van henver HTML gevorderde PHP.net: explode
PHP.net: strstr (PHP.net: preg_match)
Offline Richard - 15/04/2009 00:16
Avatar van Richard Crew algemeen
  1. $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
  2. foreach($files as $name => $file) {
  3. if(strcasecmp(substr($name, -3), '.js') === 0) {
  4. echo $name . "\n";
  5. }
  6. }
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.264s