[php] recursie doet niet wat ik wil

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Galois
  • Registratie: Oktober 2002
  • Laatst online: 18-09 22:39

Galois

1811 - 1832

Topicstarter
Ik heb een scriptje in PHP:

code:
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
<? 
if ($dir == '') {
?><h1>Foto's</h1><div style="margin:0px;padding:0px;"><?
$dir = '.';
if ($handle = opendir($dir)) { 
while (false !== ($file = readdir($handle))) {  
if ($file != "." && $file != ".." && $file !="index.php") { 
    
?> 
<a href="index.php?dir=<? echo $file; ?>"><? echo $file; ?></a><br> 
<? 
} 
}
?>

<? 
closedir($handle);  
} 

}
else {
?><h1><? echo $dir; ?></h1><?
if ($handle = opendir($dir)) { 
while (false !== ($file = readdir($handle))) {  
if ($file != "." && $file != ".." && $file !="index.php") {  
?> 
[img]"<?[/img]/<? echo $file; ?>" border="1" />
<? 
}  
} 
closedir($handle);  
} 
}
?>


De bedoeling van dit scriptje is dat hij een directory inleest, als deze directory foto's bevat, dat hij ze dan afbeelt, en als de directory subdirectories bevat hij zichzelf weer aanroept en weer van voor af aan begint (dus in die subdirectory weer kijkt of deze foto's bevat, zo ja, afbeelden die zooi, zo nee, volgende subdirectory openen).

Op diepte 1 doet hij het, maar verder komt hij niet. Waar gaat de recursie fout?

offtopic:
Ik moet er wel bij zeggen, dat ik niet zo'n held ben in PHP, dus sorry voor de 'slechte' code of evt simpele vraag ;)

1 - Mathematics is the language of nature. 2 - Everything around us can be represented and understood through numbers. 3 - If you graph the numbers of any system, patterns emerge.


Acties:
  • 0 Henk 'm!

Verwijderd

Recursie impliceert een functie die zichzelf aanroept. Ik zie in jouw programma niet eens een functie definitie staan. De vraag is dus: Waar zou de recursie überhaupt vandaan moeten komen?

[ Voor 5% gewijzigd door Verwijderd op 10-06-2004 19:16 ]


Acties:
  • 0 Henk 'm!

  • Tarzan
  • Registratie: November 2003
  • Laatst online: 11:16
Je code is idd erg on-overzichtelijk :X

Maar goed, om recursief te scripten moet je je script in een functie zetten, die zichzelf weer aanroept als er subfolders in je map staan.

..:: ::..


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Ik weet niet waar jij recursie gebruikt in je programma, maar igg niet in je sample-code. Er wordt teminste nergens zich zelf aangeroepen. Hierdoor is het ook logisch dat je niet verder komt dan 1 laag diep, want toen hield je code op. Je bent minimaal een functie nodig om hier recursie toe te kunnen passen.

Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Ik denk dat de TS recursie net iets anders opvat,
Deze code genereerd een linkje naar zich zelf, waardoor hij verder een map in kan browsen :)
Geen echte recursie, maar toch :)

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • Galois
  • Registratie: Oktober 2002
  • Laatst online: 18-09 22:39

Galois

1811 - 1832

Topicstarter
Recursie... Loopje. Ik bedoel inderdaad dat hij als de map geen foto's bevat, hij alleen de mapnaam als link toont...
Nu probeert hij in diepte groter dan 1 om de mappen als foto's weer te geven.

Sorry, maar mijn programmeerkunsten zijn huis, tuin en keuken kunsten(niet meer gedaan sinds mijn studie...).

offtopic:
Elke zomer denk ik: "Deze zomer ga ik een boek kopen en PHP eens goed leren, ipv dat halve werk!" Deze zomer heb ik wat meer tijd en zal ik het _echt_ doen!

[ Voor 25% gewijzigd door Galois op 10-06-2004 19:23 ]

1 - Mathematics is the language of nature. 2 - Everything around us can be represented and understood through numbers. 3 - If you graph the numbers of any system, patterns emerge.


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 19-09 09:34

thomaske

» » » » » »

Galois schreef op 10 juni 2004 @ 19:21:
Recursie... Loopje. Ik bedoel inderdaad dat hij als de map geen foto's bevat, hij alleen de mapnaam als link toont...
Nu probeert hij in diepte groter dan 1 om de mappen als foto's weer te geven.
http://nl2.php.net/is_dir
http://nl2.php.net/is_file

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Cavalera125
  • Registratie: December 2003
  • Laatst online: 11:15
Een paar tabs in je code waren niet misplaatst geweest :)

Ik heb de code niet heel aandachtig doorgelezen. Wat me opvalt is dat je kijkt of $dir gelijk is aan ''. Na die link van je is dat natuurlijk niet meer. Dan is $dir namelijk gelijk aan $file. Dus kom je automatisch de 2e keer in die else terecht. En die else probeert plaatjes te laten zien.

Wat ik je ook aanraad is om $_GET["dir"] te gebruiken ipv $dir. Dit met betrekking tot registerglobals.

[ Voor 12% gewijzigd door Cavalera125 op 10-06-2004 21:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

/me graait voor de afwisseling ook eens uit de oude doos

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
47
48
49
50
51
52
53
<?php 

/** 
  *  Function that searches for certain files. 
  * 
  *  @param String sInitDir is the initializing directory, that's the 
  *                directory where to start 
  *  @param Array  aExtensions is an array with all extensions that 
  *                should be searched for 
  *  @param Array  aFiles is an array that returns all files that have 
  *                been found. 
  * 
  *  @explain First of all the function opens the initializing directory, 
  *  then it analyses all its entries. If an entry is "." or ".." the next 
  *  entry will be analysed. If an entry appears to be a directory, that 
  *  directory will be analyes and so on. So basicly, this is a perfect 
  *  example of a recursive function. 
  * 
  *  @example This example searches for all text documents in your document 
  *  root and sub directories 
  *   
  *  <code> 
  *    <?php 
  *      $aFiles = Array(); 
  *      getFiles($_ENV['DOCUMENT_ROOT'], Array ("txt", "doc"), $aFiles); 
  *      var_dump($aFiles); 
  *    ?> 
  *  </code> 
  * 
  *  @author Jorgen Horstink <jorgen@misschienwelspam.nl> 
  */ 

function getFiles($sInitDir, $aExtensions, &$aFiles) 
{ 
   $hD = dir($sInitDir); 
   while (false !== ($sEntry = $hD->read())) { 
       if ($sEntry == "." || $sEntry == "..") { 
           continue; 
       } 
       $sPath = $sInitDir . "/" . $sEntry; 
       if (!is_dir($sPath)) { 
           $aParts = explode(".", $sEntry); 
           if (in_array($aParts[sizeOf($aParts) - 1], $aExtensions)) { 
               $aFiles[] = $sPath; 
           } 
       } else { 
           getFiles($sPath, $aExtensions, $aFiles); 
       } 
   } 
   $hD->close(); 
} 

?>

[ Voor 12% gewijzigd door Verwijderd op 10-06-2004 22:12 ]

Pagina: 1