Toon posts:

[php] dir tree maken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een scriptje geschreven voor het uitlezen van een directory, en dat hij deze als was het windows verkenner weergeeft.
De code:

DIT IS DE WERKENDE UITEINDELIJKE CODE :)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<?
/*
**************************************************
**************************************************
***             Dirtree V1.0 :)                ***
**************************************************
*** Door: Doniek Franken                       ***
*** Email: d.franken@i-future.nl               ***
*** Datum: 22-01-02                            ***
*** Copyright: Gebruik maar wat je wilt        ***
**************************************************
**************************************************
*/

// De javascripts benodigd voor het 'uitklappen' van de dirs
echo "
<script>";
echo "function expand(element,figuur) {
          if (element.style.display=='none'){
             element.style.display='';
             figuur.src='-.gif';
          }
          else{
             element.style.display='none';
             figuur.src='+.gif';
          }
     }";

// Het 'onthouden' welke span je hebt en hoe de images heten
echo "
var spannen = new Array;
var teller = 0;
var figuren = new Array;
var figuurteller = 0;

function addSpan(spannaam) {
    spannen[teller] = spannaam;
    teller++;
}

function addFigure(figuurnaam) {
    figuren[figuurteller] = figuurnaam;
    figuurteller++;
}
</script>";

// Ach ja, de tekst moet een lettertype hebben he
echo "<font face=Arial>";

// De links voor het uitklappen en inklappen van de dirs
echo "
<a href='javascript:expandAll();'>[img]'-.gif'[/img]</a> All<br>
<a href='javascript:collapseAll();'>[img]'+.gif'[/img]</a> All<br><br><br>";

// De functie om de dir uit te lezen
function leesDir($dir,$level, $basedir) {

// De extensies die je weer wilt geven, je kunt er hier zoveel neerzetten als je
// wilt, zorg er alleen wel voor dat de nummering opvolgend is.
$extensies[0] = ".html";
$extensies[1] = ".htm";
$extensies[2] = ".php";
$extensies[3] = ".php2";
$extensies[4] = ".php3";
$extensies[5] = ".gif";

// Het openen van de dir
$rep = opendir($basedir.$dir);

// Het bepalen van het aantal spaties voor het inspringen
$voorzetsel = "";
for($tellertje=0;$tellertje<=$level;$tellertje++) {
    $voorzetsel.="&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;";
}

// Het uitlezen van een dir
while ($file = readdir($rep)) {
      // het uitgelezen mag niet gelijk zijn aan .. of aan . (.. verwijst naar
      // zichzelf en . naar de bovenliggende map, of andersom)
      if($file != '..' &amp;amp;&amp;amp; $file !='.'){
            // controleren of het uitgelezen tekstje een dir is
            if (is_dir($basedir.$dir."/".$file)){
                  // als we een dir hebben, alle 'aparte' tekens vervangen
                  // door nix
                  $dirspan = str_replace("/","",$dir);
                  $dirspan = str_replace(" ","",$dirspan);
                  $dirspan = str_replace("^","",$dirspan);
                  $dirspan = str_replace("%","",$dirspan);
                  $dirspan = str_replace("$","",$dirspan);
                  $dirspan = str_replace("#","",$dirspan);
                  $dirspan = str_replace("@","",$dirspan);
                  $dirspan = str_replace("!","",$dirspan);
                  $dirspan = str_replace("&amp;amp;","",$dirspan);
                  $dirspan = str_replace("*","",$dirspan);
                  $dirspan = str_replace("(","",$dirspan);
                  $dirspan = str_replace(")","",$dirspan);
                  $dirspan = str_replace("+","",$dirspan);
                  $dirspan = str_replace("?","",$dirspan);
                  $dirspan = str_replace("'","",$dirspan);
                  $dirspan = str_replace("-","",$dirspan);
                  $dirspan = str_replace("{","",$dirspan);
                  $dirspan = str_replace("}","",$dirspan);
                  $dirspan = str_replace("[","",$dirspan);
                  $dirspan = str_replace("]","",$dirspan);
                  $dirspan = str_replace(":","",$dirspan);
                  $dirspan = str_replace(";","",$dirspan);
                  $dirspan = str_replace("\"","",$dirspan);
                  $dirspan = str_replace("<","",$dirspan);
                  $dirspan = str_replace(">","",$dirspan);
                  $dirspan = str_replace(",","",$dirspan);
                  $dirspan = str_replace("~","",$dirspan);
                  $dirspan = str_replace("`","",$dirspan);
                  $dirspan = str_replace("=","",$dirspan);
                  $dirspan = str_replace("|","",$dirspan);
                  $dirspan = str_replace("\\","",$dirspan);
                  
                  $filespan = str_replace("/","",$file);
                  $filespan = str_replace(" ","",$filespan);
                  $filespan = str_replace("^","",$filespan);
                  $filespan = str_replace("%","",$filespan);
                  $filespan = str_replace("$","",$filespan);
                  $filespan = str_replace("#","",$filespan);
                  $filespan = str_replace("@","",$filespan);
                  $filespan = str_replace("!","",$filespan);
                  $filespan = str_replace("&amp;amp;","",$filespan);
                  $filespan = str_replace("*","",$filespan);
                  $filespan = str_replace("(","",$filespan);
                  $filespan = str_replace(")","",$filespan);
                  $filespan = str_replace("+","",$filespan);
                  $filespan = str_replace("?","",$filespan);
                  $filespan = str_replace("'","",$filespan);
                  $filespan = str_replace("-","",$filespan);
                  $filespan = str_replace("{","",$filespan);
                  $filespan = str_replace("}","",$filespan);
                  $filespan = str_replace("[","",$filespan);
                  $filespan = str_replace("]","",$filespan);
                  $filespan = str_replace(":","",$filespan);
                  $filespan = str_replace(";","",$filespan);
                  $filespan = str_replace("\"","",$filespan);
                  $filespan = str_replace("<","",$filespan);
                  $filespan = str_replace(">","",$filespan);
                  $filespan = str_replace(",","",$filespan);
                  $filespan = str_replace("~","",$filespan);
                  $filespan = str_replace("`","",$filespan);
                  $filespan = str_replace("=","",$filespan);
                  $filespan = str_replace("|","",$filespan);
                  $filespan = str_replace("\\","",$filespan);

                  // het weergeven van het figuurtje, met daarnaast de dir-naam
                  echo $voorzetsel."[img]'+.gif'[/img] &amp;amp;nbsp;&amp;amp;nbsp;".$file."<br>";

                  // het aanmaken van een span, dit voor het uitklap effect
                  echo "<span id='z$dirspan$filespan' style=\"display:'none'\">";
                  // het aanmelden van de span, zodat deze later herkent kan worden
                  echo "<script>addSpan(z$dirspan$filespan);</script>";
                  // Het uitlezen van de huidige dir
                  leesDir($dir."/".$file,$level+1,$basedir);
                  // Het afsluiten van de span
                  echo "</span>";
            }
            // Als het een file betreft
            else {
                  // De extensie van de file opvragen
                  $extensie = strrchr($file,".");
                  // Voor elke hierboven gedefinieerde extensie controleren of
                  // de opgevraagde extensie overeenkomt
                  for($tellertje=0;$tellertje<count($extensies);$tellertje++) {
                      if ($extensie == $extensies[$tellertje]) {
                           // Het weergeven van de filenaam. Hier kan zeer makkelijk
                           // een link toegevoegd worden, zodat je gelijk naar
                           // de file kan 'surfen'
                           echo $voorzetsel.$file."<br>";
                      }
                      // Komt de opgevraagde extensie niet overeen met de gedefinieerde
                      // extensies dan:
                      else {
                           // Hier kun je dan iets doen, of juist niets
                      }
                  }
            }
      }
}
// Het afsluiten van de dir
closedir($rep);
}

// Het beginnen met uitlezen van de dir-structuur
// leesdir("",0,De directory waar hij moet beginnen)
leesDir("",0,"begindir");

// Javascript functies voor het uitklappen / inklappen van __ALLE__ mappen
echo "
<script>
function expandAll() {
    for(teller=0;teller<spannen.length;teller++) {
        if (spannen[teller].style.display=='none'){
             spannen[teller].style.display='';
             figuren[teller].src='-.gif';
        }
    }
}
function collapseAll() {
    for(teller=0;teller<spannen.length;teller++) {
        if (spannen[teller].style.display!='none'){
             spannen[teller].style.display='none';
             figuren[teller].src='+.gif';
        }
    }
}
</script>
<br><br><a href='javascript:expandAll();'>[img]'-.gif'[/img]</a> All<br>
<a href='javascript:collapseAll();'>[img]'+.gif'[/img]</a> All";

// Het afsluiten van het font-tag
echo "</font>";
// De directory-structuur is (als het goed is) weergegeven.

// EINDE
?>

EINDE WERKENDE CODE


Het probleem is dat hij een directory die in een directory staat niet uitleest. Ook niet als ik clearstatcache niet van commentaar voor zie. Wie ziet het probleem??

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 21 januari 2002 23:54 schreef doniek het volgende:
Het probleem is dat hij een directory die in een directory staat niet uitleest. Ook niet als ik clearstatcache niet van commentaar voor zie. Wie ziet het probleem??
En als je kijkt of $dir.$file een dir is?

Dat clearstatcache zal niks uitmaken.

Verwijderd

Topicstarter
Dat moet wel een dir zijn, want $dir is sowieso een dir, die heb je namelijk net uitgelezen, dus als $file een dir is, dan is $dir.$file ook een dir.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 22 januari 2002 00:06 schreef doniek het volgende:
Dat moet wel een dir zijn, want $dir is sowieso een dir, die heb je namelijk net uitgelezen, dus als $file een dir is, dan is $dir.$file ook een dir.
Ja, maar die check heb je er niet in toch?
if (is_dir($file)){

Verwijderd

Topicstarter
Op dinsdag 22 januari 2002 00:12 schreef ACM het volgende:
Ja, maar die check heb je er niet in toch?
Jawel hoor:
PHP:
1
2
3
4
5
6
<?
if($file != '..' &amp;&amp; $file !='.'){            
   if (is_dir($file)){                  
      echo $voorzetsel."<a href='javascript:expand$dir$file);'>".$file."</a>"."<br>";
      echo "<span id='$dir$file' 
?>

Ben erachter wat ik fout had gedaan, was vergeten een slash toe te voegen aan de directories, nu laat hij een directory in een directory wel zien, maar als daar weer een directory in zit, dan herkent hij die soms niet als directory en soms weer wel, waar kan dat aan liggen??
edit:

Foute vraag

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 15-09 19:58
Op dinsdag 22 januari 2002 00:15 schreef doniek het volgende:Ben erachter wat ik fout had gedaan, was vergeten een slash toe te voegen aan de directories, nu laat hij een directory in een directory wel zien, maar als daar weer een directory in zit, dan herkent hij die soms niet als directory en soms weer wel, waar kan dat aan liggen??
Euh ik heb niet echt goed naar je script gekeken moet ik toegeven, maar moet je daar niet een functie voor maken of while fuctie gebruiken oid, om net zo lang door te gaan checken of r een dir zit in de dir waarop die op dat moment info van verzamelt .. ?

Verwijderd

Topicstarter
Maar dat doet ie toch??
Hij begint in een dir, daar leest hij een regel uit, hij kijkt of dit een dir is, is dit zo, dan begint hij weer opnieuw, is dit niet het geval, dan zet hij de filenaam neer.

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 15-09 19:58
Op dinsdag 22 januari 2002 09:12 schreef doniek het volgende:
Maar dat doet ie toch??
Hij begint in een dir, daar leest hij een regel uit, hij kijkt of dit een dir is, is dit zo, dan begint hij weer opnieuw, is dit niet het geval, dan zet hij de filenaam neer.
euh nee ?

Wat r nu gebeurt is dat hij vauit de startdir gaat lopen, als ie een iets tegen komt wat niet "." of ".." is gaat ie kijken of het een dir is .. als dat zo is dannuh gebeurt r iets wazigs :) :? vat dat ff niet .. nouja en als het geen dir is (maar dus een file) print ie die.

Er wordt (d8 ik) dus niet "pieper" de dir structuur in gegaan

Verwijderd

PHP:
1
2
3
<?
is_dir($file)
?>

moet het volledige pad hebben
dus:
PHP:
1
2
3
<?
is_dir($base.$dir.$file)
?>

Verder wil je geen slashes of andere rare tekens in je span id's, dus daar zou je nog even een str_replace() overheen moeten halen. ID's moeten nl wel uniek zijn:
ik gok zo dat je niet 1 index.php in de hele tree hebt :)

Verwijderd

Topicstarter
Ik heb hem nu zover dat hij alle dirs laat zien, dat deze ook uit komen rollen, en het lukt nu zelfs om alles uit te laten rollen door middel van een link, alleen als ik alles uit wil laten rollen, dan wil ik natuurlijk ook het plaatje veranderen van een dichtgeklapt mapje, naar een open mapje. Daarvoor heb ik het plaatje een naam gegeven en wel figuur[een nummer], maar als ik deze aanspreek in mijn methode expandAll(), dan geeft hij een error namelijk dat figuur niet gedefinieerd is, maar dat is hij toch wel?? Wat doe ik nu weer fout?
edit:

Ik heb in de openingspost de oude code vervangen door de nieuwe, leek me wat makkelijker als de nieuwe code hier weer neer planten :)

Verwijderd

Topicstarter
Het werkt nu eindelijk helemaal :)

Heb voor degene die hier gebruik van willen maken, of die ook tegen problemen aan lopen, de code in de openingspost vervangen door de werkende code (tenminste dat hoop ik)
Pagina: 1