directory zoeken
Server (voorbeeld)
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
/root/ozziephp/lokaal/mijnbestanden
/photos
/www/httpdocs/
index.php
/project1
/project2/tutorials
/overig/mijnframework
/photos
/www/httpdocs/
index.php
/project1
/project2/tutorials
/overig/mijnframework
Ik zou graag een scriptje willen waarmee ik vanuit index.php de directories kan doorzoeken naar de directory "mijnframework".
Zodra deze directory gevonden is moet het pad naar de directory ge-returned worden.
Ik heb al wat geprobeerd met glob (heb de code helaas nu niet bij de hand) maar ik kwam er niet uit. Kan iemand mij helpen aub?
Gewijzigd op 27/04/2011 20:08:55 door Ozzie PHP
Tevens kun je te maken krijgen met een tweede probleem. Wat als er een map is met dezelfde naam als jouw framework? Als jouw map eerder wordt gevonden is er niets aan de hand maar wat als de naam genoot eerder wordt gevonden? Dan zit je dus fout met je pad.
Dit dus :)
"Tevens kun je te maken krijgen met een tweede probleem. Wat als er een map is met dezelfde naam als jouw framework? Als jouw map eerder wordt gevonden is er niets aan de hand maar wat als de naam genoot eerder wordt gevonden? Dan zit je dus fout met je pad."
Ik maak de naam uniek genoeg zodat dat in de praktijk niet kan gebeuren.
Enig idee hoe ik dit voor elkaar krijg?
Zo uit het hoofd lukt het me niet helemaal.
Ik heb tot nu toe dit. Doe ik het met een test map met daarin maar een paar mappen dan is er niets aan de hand maar laat ik hem door mijn snippet folder gaan dan gaat het fout "Teweinig geheugen onder andere".
Ik heb helaas te weinig tijd om de foutjes er uit te halen. :p dit zijn de leukere problemen.
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
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
<?php
function search_dir($name, $path = '/'){
# Alle mappen uit de huidige map halen.
$directories = glob($path.'/*', GLOB_ONLYDIR);
# kijken of er iets is gevonden.
if(empty($directories)){
# Er is helaas niets gevonden dus dan geven we false terug.
return false;
}
else{
# Kijken of de map die we zoeken in de huidige map zit.
if(in_array($path.'/'.$name, $directories)){
# Yes! we hebben de map gevonden.
return $path;
}
else{
# Helaas! We hebben de gezochte map niet gevonden dus dan moeten we iets dieper graven.
$key = 0;
while(array_key_exists($key, $directories) and !$path = search_dir($name, $directories[$key])){
$key++;
}
return $path;
}
}
}
?>
function search_dir($name, $path = '/'){
# Alle mappen uit de huidige map halen.
$directories = glob($path.'/*', GLOB_ONLYDIR);
# kijken of er iets is gevonden.
if(empty($directories)){
# Er is helaas niets gevonden dus dan geven we false terug.
return false;
}
else{
# Kijken of de map die we zoeken in de huidige map zit.
if(in_array($path.'/'.$name, $directories)){
# Yes! we hebben de map gevonden.
return $path;
}
else{
# Helaas! We hebben de gezochte map niet gevonden dus dan moeten we iets dieper graven.
$key = 0;
while(array_key_exists($key, $directories) and !$path = search_dir($name, $directories[$key])){
$key++;
}
return $path;
}
}
}
?>
Dankjewel... ik had het zelf in mijn eigen code iets anders gedaan... in plaats van in_array en array_key_exists had ik een foreach loop gemaakt, zoiets als foreach(glob($path.'/*', GLOB_ONLYDIR) as $directory) en dan telkens kijken of de $directory.'framework' een bestaande directory is via is_dir. Is jouw manier beter?
Dit is echt een goed voorbeeld van opnemen in configuratie bestand. Dit moet een gebruiker echt zelf aangeven.
Wat je ook kan doen.. (Maak de gebruiker het nog een beetje makkelijker), bij de installatie maak je een optie dat de gebruiker zelf de map kan kiezen. Dan kan je altijd nog zelf de configuratie in het configuratie bestand inschieten, of in je sessie trappen ofzo. Want stel ik heb 100.000 (volgens mij heb je dat al gauw) dan ben je toch even bezig om dit allemaal door te lopen zoeken, wat dus weer extra installatie tijd kost die, mits je het bovenstaande goed uitvoert, makkelijk kan worden voorkomen.
Overigens, dit is niet betweterij maar gewoon zoals ik denk dat het beste is.
Groetjes.
Ongeacht of dit wel of niet de "juiste" manier is, wil ik graag weten HOE ik het moet doen! :)
Of het beter is weet ik zo niet. Het dieper zoeken gedeelte is wat de fouten maakt als het teveel wordt "Gok ik". Als het goed is stopt hij met zoeken zodra hij iets heeft gevonden. Een foreach zal alles aflopen en niet stoppen als er iets is gevonden.
je kan die foreach toch gewoon breaken als ie iets gevonden heeft? maar jouw manier is misschien handiger omdat je dan niet letterlijk gaat kijken of een directory bestaat...
Gewijzigd op 27/04/2011 23:59:58 door - Mark -
wat bedoel je met "een aantal functies extra" ?
Ik heb per ongeluk functies geschreven in plaats van functie. Klein beetje verkeken met het opnieuw aanroepen van de search_dir in de while lus. Jij hebt neem ik aan iets soorts gelijk in de foreach staan?
Heb je het trouwens werkend gekregen?
Morgen weer verder... bedtijd!
Als ik morgen tijd over heb dan kijk ik of ik mijn variant goed werkend krijg. Is wel een leuk iets voor in mijn snippet bak.