[PHP] Mappen uitlezen en eerste bestand weergeven *

Pagina: 1
Acties:
  • 374 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dennisderoo
  • Registratie: Februari 2004
  • Laatst online: 17-02-2021
Ik heb een script geschreven die het volgende (bijna) doet:
1. Hij leest de map "foto" uit waarin weer mappen staan met categorieën.
2. Hij leest de map met de categoriën uit waarin weer mappen met foto's staan.
3. Hij leest deze mappen met foto's uit en kiest dan de eerste foto in die map.

Nu het probleem, hij onthoudt maar één categorie.

Voorbeeld: Ik heb de volgende mappen:
foto/categorie1/abc/
foto/categorie1/def/
foto/categorie2/ghi/

Nu onthoudt/gebruikt de script steeds "foto/categorie1" en probeerd hij ook "foto/categorie1/ghi" te openen terwijl het "foto/categorie2/ghi" behoort te zijn.

Wat zie ik nou over het hoofd? wat doe ik verkeerd? ik ben al de hele dag bezig maar ik kom er niet uit. Wie kan mij helpen?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<? 
$directory = "foto/"; 
// Loop door alle directories heen 
if ($dir = opendir($directory)) {  
    while (($file = readdir($dir)) !== false) {  
               if($file != ".." && $file != "." && $file != "images") {  
                   if (is_dir($directory . $file)) {  
                       $folderlist[] = $file;  
                   }  
              }  
       }   
   closedir($dir);  
}  

foreach ($folderlist as $map) {  
    // Loop door alle directories met categoriën heen 
    if ($dir = opendir("foto/".$map."/photos/")) {  
        while (($bestand = readdir($dir)) !== false) {  
                   if($bestand != ".." && $bestand != "." && $bestand != "images") {  
                       //if (is_dir("foto/".$map."/" . $bestand)) { 
                           $filelist[] = $bestand;  
                       //} 
                  }  
           }   
       closedir($dir);  
    }  

} 

// eerste foto zoeken en weergeven    
foreach ($filelist as $folder) { 
$dirPath = "foto/".$map."/photos/".$folder."";  
$i=0; $handle=opendir($dirPath);  

while (false!==($file = readdir($handle))) { 
  if ($file != "." && $file != ".." && $file != "thumbnails")  
    {  
      break;  
    }  
}   

$eerstefoto = $file;  
}
echo $eerstefoto; 

?>

Acties:
  • 0 Henk 'm!

Verwijderd

Natuurlijk, in de $filelist die je als laatste doorloopt staan alleen maar mappen van 3 lagen diep (abc, def, ghi). Die doorloop je in de laatst gebruikte $map. Wat je moet doen is je laatste en die daarvoor (en misschien ook wel die daarvoor) in elkaar stoppen:

Pseudo:
PHP:
1
2
3
4
5
6
7
8
9
10
foreach ($categories as $category) {
    $folders=getfolders();
    foreach ($folders as $folder) {
        $subfolders=getsubfolders();
        foreach ($subfolders as $subfolder) {
            $files=getfiles();
            echo $file[0];
        }
    }
}


Je kan het ook na elkaar doen, maar dan moet je absolute paden opslaan. Je hebt dan eerst een array met
code:
1
2
categorie1
categorie2

en dan zoek je door die twee directories en dan maak je een array
code:
1
2
3
4
5
categorie1/abc
categorie1/def
categorie1/ghi
categorie2/abc
...

Dat heb je nu niet, want jij hebt alleen de naam van de subdir in je array staan.

Acties:
  • 0 Henk 'm!

  • Dennisderoo
  • Registratie: Februari 2004
  • Laatst online: 17-02-2021
Je uitleg snap ik. Maar je code niet.
Wat doet bijvoorbeeld die $folders=getfolders(); ?
Ik krijg doordoor een parse error.

Acties:
  • 0 Henk 'm!

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

Dennisderoo, kun je volgende keer misschien je topictitel starten met de taal?
zoiets als:

[PHP] Mappen uitlezen en eerste bestand weergeven

Dan weet ik dat ik hem niet hoef te lezen :)

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:10

Robtimus

me Robtimus no like you

Dennisderoo schreef op woensdag 02 maart 2005 @ 16:28:
Je uitleg snap ik. Maar je code niet.
Wat doet bijvoorbeeld die $folders=getfolders(); ?
Ik krijg doordoor een parse error.
Sjord zei al dat het PSEUDO code is. Die getfolders moet je dus zelf maken.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 24-07 21:14

WPN

ik heb deze manier toevallig sinds dinsdag te pakken voor dit soort dingen


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 function retrieveDirs($path) 
 { 
  $delim = "\\"; // verander in "/" voor unix
  $extensions = array("jpg", "png", "jpeg", "gif");

  if($dir=opendir($path)) 
  { 
   $key = strrchr($path,$delim);
   $key = substr($key,1,strlen($key));
   while(($file=readdir($dir))!== false) 
   {
    if(is_dir($path.$delim.$file) AND $file!= "." AND $file!= "..") 
    {
     $array[$file] = retrieveDirs($path.$delim.$file);
    }
    elseif($file!= "." AND $file!= "..") 
    {
     for ($z = 0; $z < count($extensions); $z++)
     {
      if (eregi("\.". $extensions[$z] ."$", $file)) 
      {
       $array[] = $file;
      }
     }
    }
   }
   closedir($dir);
  }
  return $array;
 }

  $path = "d:\\webserver\\htdocs\\fotos";
  $bestanden = retrieveDirs($path); //alle bestanden
  reset($bestanden);

  for ($i=1; $i<=count($bestanden); $i++)
  {
   $keys[] = key($bestanden);
   next($bestanden);
  }

  for($y=0;$y<count($keys);$y++)
  {
   sort($bestanden[$keys[$y]]);
  }



ps: om deze functie goed te laten werken dan moet je wel ff aanpassen naar je eigen structuur

in mijn huidige script waar ik het gebruik, heb ik de structuur


fotomap
|
|__pictures
|
|__thumbs

[ Voor 72% gewijzigd door WPN op 03-03-2005 23:13 ]

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Als je volgende keer ook even [PHP] in je topictitel zet dan graag :)
CaptBiele: als je de volgende keer een topicreport wilt maken met daarin je melding i.p.v. het topic dan pikken de mods het ook sneller op :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1