Directory Met Inhoud Verwijderen - del_dir()

Door Wouter De Schuyter, 18 jaar geleden, 8.038x bekeken

Met deze functie kan je gemakkelijk mappen met of zonder inhoud verwijderen.

Note: als er mappen in de map staan die je wilt verwijderen zal de functie niet gaan, ze gaat enkel op mappen waar bestanden of geen bestanden in staan.


Gebruik:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php del_dir("mapnaam"); ?>

Voorbeeld: http://Geen.

Gesponsorde koppelingen

PHP script bestanden

  1. directory-met-inhoud-verwijderen-deldir

 

Er zijn 16 reacties op 'Directory met inhoud verwijderen deldir'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Roel -
Roel -
18 jaar geleden
 
0 +1 -0 -1
Bestond zoiets niet al? xD (dat is bij alles ongeveer)
Wouter De Schuyter
Wouter De Schuyter
18 jaar geleden
 
0 +1 -0 -1
Ik was er deze ochtend naar op zoek en vond het niet dus heb ik het zelf gemaakt..
PHP Newbie
PHP Newbie
18 jaar geleden
 
0 +1 -0 -1
De hele opendir() en readdir() kun je vervangen door glob():

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
<?php
    function deldir($map, $subdirs = true)
    {

        $map = (substr($map,0,-1) != '/') ? $map.'/' : $map;

        foreach(glob($map.'*') as $file)
        {

            if(is_dir($file) && $subdirs == true)
            {

                deldir($file);
            }


            unlink($file);
        }

        
        if(rmdir($map))
        {

            return true;
        }

        
        return false;
    }

?>
Lode
Lode
18 jaar geleden
 
0 +1 -0 -1
de hele glob kan je weer vervangen door een RecursiveDirectoryIterator eventueel. in php5.3 krijgen wel ook een globIterator...
Wouter De Schuyter
Wouter De Schuyter
18 jaar geleden
 
0 +1 -0 -1
Ahn sorry, heb niet echt ervarig met dirs vandaar dat ik er deze ochtend naar opzoek was. Heb dan maar deze functie gemaakt met de documentatie van php.net en het werkt goed dus voor mij is het niet zo'n probleem..
Steen
steen
18 jaar geleden
 
0 +1 -0 -1
Deze bestaat al, die met glob is nieuw :)
Wouter De Schuyter
Wouter De Schuyter
18 jaar geleden
 
0 +1 -0 -1
linkje..?
PHP Newbie
PHP Newbie
18 jaar geleden
 
0 +1 -0 -1
Lode,
het werken met de recursiveDirectoryIterator vergt nogal wat oefening. Ik denk dat een glob in dit geval vele malen gemakkelijker is en misschien nog wel sneller ook.
Toby hinloopen
toby hinloopen
18 jaar geleden
 
0 +1 -0 -1
je kan een functie gebruiken die checkt of een bestand een map is.
Indien het een map is kan je deze map verwijderen d.m.v. je eigen functie.
Zo kan je ook mappen met inhoud in mappen verwijderen zonder limiet.
Martijn Wieringa
Martijn Wieringa
18 jaar geleden
 
0 +1 -0 -1
Is glob() zonder rare restricties op gebied van SAVE_MODE o.i.d. ik ken die functie ook niet.. ff kijken :P
PHP erik
PHP erik
18 jaar geleden
 
0 +1 -0 -1
Als je rekening gaat houden met safe_mode dan ben je helemaal verkeerd bezig, het gaat er niet voor niets uit bij php 6. Als je host safe_mode heeft dan heb je de verkeerde host uitgekozen. Ik zeg overigens niet dat dit bij jou het geval is. glob() is een heel gebruikelijke functie.
Lode
Lode
18 jaar geleden
 
0 +1 -0 -1
Zo ingewikkeld is de RecursiveDirectoryIterator niet hoor...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$rec
= new RecursiveDirectoryIterator('C:/php');
$it = new RecursiveIteratorIterator($rec);

foreach($it as $file){
    echo '$file: '.$file.'<br />'.PHP_EOL;
    unset($file); //gc
}
unset($rec, $it); //gc
?>
J orii
J orii
18 jaar geleden
 
0 +1 -0 -1
als je de directory verwijdert, gaan de bestanden toch ook automatische weg lijkt mij, waarom zou je er een script omheen gooien ?
Wouter De Schuyter
Wouter De Schuyter
18 jaar geleden
 
0 +1 -0 -1
Niet waar, gaat niet, probeer maar eens een dir the verwijderen met rmdir() waar bestanden in staan ;)
Robert Deiman
Robert Deiman
18 jaar geleden
 
0 +1 -0 -1
@J orii
Je kan dat wel vergelijken met de oude MS-Dos commando's (als je dat kent ;) )
"rd" -> Enter: Stond daar voor "Remove Directory", maar als de map niet leeg was kreeg je een melding. In dos kwam daar de deltree functie toen terug, zoiets is het hierbij ook.


@Lode
En die RDI (afkorting van de iterator) gaat in jou voorbeeld zelf alle mappen langs? Dat valt nu uit de code namelijk niet zo op te maken, en ik ken de RDI verder nog niet.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Lode
Lode
18 jaar geleden
 
0 +1 -0 -1
In het bovenstaande geeft hij alleen nog de bestanden terug niet de directories. Loopt ze wel door allemaal...
Dus is hier misschien niet helemaal relevant.

Maar met wat aanpassingen kunnen we het natuurlijk wel gewoon met DirectoryIterators doen...

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
<?php
function DeleteRecursive($path){
    $iterator = ($path instanceof DirectoryIterator) ? $path : new DirectoryIterator($path);
    
    foreach($iterator as $file){
        if(!$file->isDot()){
            if($file->isDir()){
                DeleteRecursive($file->getRealPath()); //{__FUNCTION__}(); is misschien netter in php5.2x
                rmdir($file->getRealPath());
            }

            if($file->isFile()){
                unlink($file->getRealPath());
            }
        }

        unset($file);
    }

    unset($iterator, $path);
}

DeleteRecursive('directory');
?>


Zal de gehele inhoud van de map 'directory' verwijderen.

Ik zie alleen helemaal niet waarom je een script zou willen hebben om hele directories te legen? Ik gebruik dit nooit eigenlijk...

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

Inhoudsopgave

  1. directory-met-inhoud-verwijderen-deldir

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.