recursief folder lezen
roy - 13/04/2009 13:52 (laatste wijziging 13/04/2009 13:53)
|
PHP 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:
echo '<pre>'. print_r($cCore->getItemsFromFolder($ROOTDIR . 'js', 0), 1) .'</pre>';
echo '<pre>'. print_r($cCore->getItemsFromFolder($ROOTDIR . 'js', 0), 1) .'</pre>';
de functie:
function getItemsFromFolder($dir, $i)
{
$listDir = array();
if($handle = opendir($dir)) {
while(($read = readdir($handle)) !== false) {
if ($read != "." && $read != ".."){
if(is_file($dir."/".$read)) {
echo $i . $read."<br>\n";
$listDir[$i] = $dir ."/". $read;
$i++;
}
elseif(is_dir($dir."/".$read)){
echo $i . $read."<br>\n";
$this->getItemsFromFolder($dir."/".$read, $i++);
}
}
//$i++;
}
closedir($handle);
}
return $listDir;
}
function getItemsFromFolder($dir, $i) { while(($read = readdir($handle)) !== false) { if ($read != "." && $read != ".."){ echo $i . $read."<br>\n"; $listDir[$i] = $dir ."/". $read; $i++; } elseif(is_dir($dir."/".$read)){ echo $i . $read."<br>\n"; $this->getItemsFromFolder($dir."/".$read, $i++); } } //$i++; } } return $listDir; }
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 |
|
Joost - 13/04/2009 13:58
|
PHP expert |
|
function getItemsFromFolder($dir, $i)
{
if(!isset($listDir)){
static $listDir = array();
}
if($handle = opendir($dir)) {
while(($read = readdir($handle)) !== false) {
if ($read != "." && $read != ".."){
if(is_file($dir."/".$read)) {
$listDir[$i] = $dir ."/". $read;
$i++;
}
elseif(is_dir($dir."/".$read)){
return $this->getItemsFromFolder($dir."/".$read, $i++);
}
}
//$i++;
}
closedir($handle);
}
return $listDir;
}
function getItemsFromFolder($dir, $i) { } while(($read = readdir($handle)) !== false) { if ($read != "." && $read != ".."){ $listDir[$i] = $dir ."/". $read; $i++; } elseif(is_dir($dir."/".$read)){ return $this->getItemsFromFolder($dir."/".$read, $i++); } } //$i++; } } return $listDir; }
Zonder te testen denk ik dat deze het klusje wel klaart |
roy - 13/04/2009 20:01 (laatste wijziging 13/04/2009 22:54)
|
PHP gevorderde |
|
script een beetje aangepast:
function getItemsFromFolder($dir, $i)
{
if(!isset($listDir)){
static $listDir = array();
}
if($handle = opendir($dir)) {
while(($read = readdir($handle)) !== false) {
if ($read != "." && $read != ".." && $read != "main.js" && $read != "jquery-1.3.2.min.js"){
if(is_file($dir."/".$read)) {
$listDir[$i] = str_replace('/var/www/html/cms','',$dir ."/". $read);
$i++;
}
elseif(is_dir($dir."/".$read)){
return $this->getItemsFromFolder($dir."/".$read, $i++);
}
}
}
closedir($handle);
}
return $listDir;
}
function getItemsFromFolder($dir, $i) { } while(($read = readdir($handle)) !== false) { if ($read != "." && $read != ".." && $read != "main.js" && $read != "jquery-1.3.2.min.js"){ $listDir[$i] = str_replace('/var/www/html/cms','',$dir ."/". $read); $i++; } elseif(is_dir($dir."/".$read)){ return $this->getItemsFromFolder($dir."/".$read, $i++); } } } } return $listDir; }
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:
$dir = $cCore->getItemsFromFolder($ROOTDIR . 'js', 0);
$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??? |
Joost - 13/04/2009 21:40
|
PHP expert |
|
return $this->getItemsFromFolder($dir."/".$read, $i++);
return $this->getItemsFromFolder($dir."/".$read, $i++);
=>
$listDir[$i] = $this->getItemsFromFolder($dir."/".$read, $i++);
$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. |
roy - 13/04/2009 22:46 (laatste wijziging 13/04/2009 23:43)
|
PHP gevorderde |
|
neej, als het een directorie is dan moet ie niet in de array komen
iemand?? |
Richard - 14/04/2009 10:25
|
Crew algemeen |
|
Wat dacht je van...
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach($files as $name => $file){
echo "$name\n";
}
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)); foreach($files as $name => $file){ }
|
roy - 14/04/2009 13:18 (laatste wijziging 14/04/2009 14:15)
|
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. |
Koen - 14/04/2009 14:57
|
PHP expert |
|
Filter die er dan uit? |
roy - 14/04/2009 20:24
|
PHP gevorderde |
|
Hoe kan je de .js files er dan uit filteren??
|
Richard - 15/04/2009 00:16
|
Crew algemeen |
|
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach($files as $name => $file) {
if(strcasecmp(substr($name, -3), '.js') === 0) {
echo $name . "\n";
}
}
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)); foreach($files as $name => $file) { } }
|
Gesponsorde links |
|
Dit onderwerp is gesloten. |
|