[Functie] Bestand namen uit map & submaps

Door Cake Masher, 18 jaar geleden, 5.189x bekeken

Deze functie haalt alle bestand namen uit de map die je opgeeft, en alle submappen die in de opgegeven map staan.

Het is een functie.

Ik kan het zelf goed gebruiken, en hoop het zelfde voor een aantal mensen hier op PHPhulp.nl

Gesponsorde koppelingen

PHP script bestanden

  1. functie-bestand-namen-uit-map-en-submaps

 

Er zijn 19 reacties op 'Functie bestand namen uit map en submaps'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Thijs X
Thijs X
18 jaar geleden
 
Maarten
Maarten
18 jaar geleden
 
0 +1 -0 -1
Ziet er goed uit :)
Mitchell
Mitchell
18 jaar geleden
 
0 +1 -0 -1
Misschien is het dan handiger ze gelijk in links om te laten zetten? ;]
Jelmer -
Jelmer -
18 jaar geleden
 
0 +1 -0 -1
Als je de functie meerdere keren gebruikt gaat het fout met de array, en komen de bestanden er dubbel of driedubbel in te staan.

Handiger is gebruik maken van array_merge om zo de resultaten van de 1e aanroep, en de daaruit volgende aanroepen van onderliggende mappen samen te voegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
// We maken de functie get_data.
function get_data ($from = "./*")
{

    // We halen $output in de functie, want die hebben we nodig.
    $output = array();
    
    // We halen alle bestandnamen + mappen uit de opgegeven map.
    foreach (glob ($from) as $name)
    {

        // We kijken of we een dir te pakken hebben.
        if (is_dir ($name))
        {

            // Zo ja, dan voeren we de functie weer uit, zodat we de data in de sub-mappen ook te pakken krijgen
            $output = array_merge($output, get_data ($name . "/*"));
        }

        else
        {
            // We hebben geen map te pakken, dus plaatsen we het bestand in de array.
            $output[] = $name;
        }
    }

    
    // We stuuren de array terug.
    return $output;
}

?>
Cake Masher
Cake Masher
18 jaar geleden
 
0 +1 -0 -1
@mitchell: Hoe bedoel je??

@Jelmer: Hmm, ik zie geen logica hoe de zelfde bestanden erin kunnen komen, aangezien als de functie opnieuw word aangeroepen het wass. in een andere map is...
Mitchell
Mitchell
18 jaar geleden
 
0 +1 -0 -1
Hij haalt toch al de bestand namen van de bestanden op? Is het dan niet handiger dat het script meteen een link naar die bestanden maakt? Een soort map browser.. ;]
Cake Masher
Cake Masher
18 jaar geleden
 
0 +1 -0 -1
@mitchell: Daar heb je een punt, kep het toegevoegd als optie.
Wolfje
wolfje
18 jaar geleden
 
0 +1 -0 -1
ziet er netjes uit Rick :D
Jelmer -
Jelmer -
18 jaar geleden
 
0 +1 -0 -1
@Rick: De functie vult de array $output, iedere keer dat zij wordt aangeroepen. Maar deze array wordt nooit geleegd. Zou ik dus 2 maal get_data() achter elkaar aanroepen op een map met een heleboel bestandjes erin, dan zou ieder bestandje 2 maal in de array terechtkomen. Je voegt bij de 2e aanroep immers alleen maar mappen toe aan $output, waar de resultaten van de 1e aanroep nog inzitten.
Cake Masher
Cake Masher
18 jaar geleden
 
0 +1 -0 -1
@jelmer: Kep het anders gedaan, met in_array. Is dit wat je bedoelde??
Jelmer -
Jelmer -
18 jaar geleden
 
0 +1 -0 -1
Dat is ook een oplossing, maar hij is wel wat vreemd. Je kan in 1 klap die hele global variabele eruit halen door te werken met een array binnen de functie, en niet eentje erbuiten. Zie mijn code van 19:11, daarin gebruik ik array_merge om de $output-array van onderliggende mappen in de $ouput-array van de bovenliggende map te voegen. Hierbij is geen global $output meer nodig.

Het gebruik van globals is altijd een beetje met bijwerkingen. Stel nu dat ik in mijn script ook al $output gebruikte om de uitvoer van het script in op te slaan, en ik roep de functie aan, dan krijg je ongewenste effecten.
Bart Smulders
Bart Smulders
18 jaar geleden
 
0 +1 -0 -1
Raar, ik heb het scriptje eens gekopie/paste en dat werkt niet bij me. echo get_data() krijg ik niets te zien. Nochtans heb ik niets veranderd in het script.
Cake Masher
Cake Masher
18 jaar geleden
 
0 +1 -0 -1
@Bart:
Dat is inderdaad raar, als ik het scriptje copieër en plak en uitvoer doet hij het gewoon zoals hij het hoort te doen.
je zei dat je get_data () echo't?
get_data word een array, met print_r kan je de heele array zien...
Bart Smulders
Bart Smulders
18 jaar geleden
 
0 +1 -0 -1
Ik weet niet of je het gaat kunnen zien maar moest het zo zijn http://84.192.166.71/index.php< daar staat het scriptje op. versie PHP5 wamp server . draaid op vista. Misschien heeft het geheel de rechten niet om uitgelezen te worden .... ff checken
Bart Smulders
Bart Smulders
18 jaar geleden
 
0 +1 -0 -1
Ok nu doet ie het wel . Deze code stond er nog voor
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
//Standaard configuratie set voor de install
$ConfiguratieBestand = 'voorinstall.conf';

// Install reeds klaar of doorverwijzen naar de install
if (!is_file($ConfiguratieBestand))
    die ('Er is geen Configuratie Bestand aangetroffen, gelieve index.php te verplaatsen naar de Root map.');
//require $wampConfFile;
$fp = fopen($ConfiguratieBestand,'w') or die("can't open file");
fclose ($fp);
?>


18 jaar geleden
 
0 +1 -0 -1
een functie met globals is eigenlijk geen functie maar hoort gewoon in een class

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
class data
{
  // Deze hebben we nodig, hier zetten we alle data in.
var  $output;


    // We maken de functie get_data.
    function get_data ($from = "./*")
    {

        // We halen $output in de functie, want die hebben we nodig.
        $this->output = array();
        
        // We halen alle bestandnamen + mappen uit de opgegeven map.
        foreach (glob ($from) as $name)
        {

            // We kijken of we een dir te pakken hebben.
            if (is_dir ($name))
            {

                // Zo ja, dan voeren we de functie weer uit, zodat we de data in de sub-mappen ook te pakken krijgen
                $this->output = array_merge($this->output, $this->get_data ($name . "/*"));
            }

            else
            {
                // We hebben geen map te pakken, dus plaatsen we het bestand in de array.
                $this->output[] = $name;
            }
        }

        
        // We stuuren de array terug.
        return $this->output;
    }
 

    function
print_data()
    {

    // We echo'en <pre>, zodat de array mooi en leesbaar word.
    echo "<pre>";
    // Voorbeeld 1
    print_r ($this->get_data("./*"));
    // We beëindigen <pre> weer.
    echo "</pre>";
    }
}

$data = new data;
$data->print_data();
?>


deze class werkt gewoon in php4 vind het zelf niet netjes om in php4 te werken maar het is netter dan globals te gebruiken..
Lode
Lode
18 jaar geleden
 
0 +1 -0 -1
leuk als je provider 1 jaar achter loopt misschien? minimaal php 5.2.
Maar er zijn heel handigere oplossingen:
DirectoryIterator en/of RecursiveDirectoryIterator
PHP Newbie
PHP Newbie
18 jaar geleden
 
0 +1 -0 -1
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Cake Masher
Cake Masher
18 jaar geleden
 
0 +1 -0 -1
@Lode: Als je die handiger vind, dan neem je dat.

Veder maakt het me niet uit als er andere manieren zijn, als mensen die beter vinden dan gebruiken ze dat.
Dit is een andere manier om het te doen ^^.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. functie-bestand-namen-uit-map-en-submaps

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.