Avatar billede dingkee Nybegynder
28. februar 2005 - 15:48 Der er 11 kommentarer og
1 løsning

Slet en mappe

Hej Eksperter :)

Jeg søger et lille script til at slette mapper med på en server...

Nogen der har et lille script der kan det??
Avatar billede elskermad.dk Nybegynder
28. februar 2005 - 16:42 #1
Avatar billede Slettet bruger
28. februar 2005 - 21:43 #2
du kan jo sige

$mappe = 'images';
unlink($mappe);
Avatar billede Slettet bruger
28. februar 2005 - 21:44 #3
hmm tror egentlig at du skal bruge rmdir($mappe); som elskermad skriver
Avatar billede apache999 Nybegynder
28. februar 2005 - 22:44 #4
Faktisk skal mappen jo være tom, førend rmdir virker. Så for at slette en hvilkensomhelst mappe (uha farligt), skal du lave en rekursiv funktion, der først sletter samtlige filer i mappen med unlink, kalder sig selv på evt. underliggende mapper, og til sidst kalder rmdir på mappen.

Jeg har en gammel svend liggende, jeg har kaldt deldir. Har lige testen den på en mappe med en masse skrald i, og den virkede. Husk, at rettighederne på samtlige filer og mapper skal være i orden.

    function deldir($dir){
        $current_dir = opendir($dir);
        while($entryname = readdir($current_dir)){
            if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")){
                deldir("${dir}/${entryname}");
            } else if ($entryname != "." and $entryname!=".."){
                unlink("${dir}/${entryname}");
            }
        }
        closedir($current_dir);
        rmdir(${dir});
    }
Avatar billede dingkee Nybegynder
01. marts 2005 - 14:36 #5
Det er sådan en løsning som apache99 har jeg søger...

Men jeg kan bare ikke få den til at virke :(

Her er lige koden til den:

<?php
$dir = $_post['dir'];

if ($side == "sletmappe"){
if(isset($post['slet'])) {
    function deldir($dir){
        $current_dir = opendir($dir);
        while($entryname = readdir($current_dir)){
            if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")){
                deldir("${dir}/${entryname}");
            } else if ($entryname != "." and $entryname!=".."){
                unlink("${dir}/${entryname}");
            }
        }
        closedir($current_dir);
        rmdir(${dir});
    }
    }
}

?>



Formen:

<form method='post' action=''>
<input type='hidden' name='dir' value='../$mappe'><br>
<input type='submit' name='sletmappe' value='Ja'>
</form>

-------------------------------------------

Nogen der kan se hvad der går galt??
Avatar billede apache999 Nybegynder
01. marts 2005 - 14:42 #6
Jeg ser fire fejl:

Hvor sætter du variablen $side, som afgør, om funktionen sættet igang? (Funktionen bør iøvrigt være placeret uden for if-strukturen, da den for så vidt ikke har noget med denne at gøre).

Hvor kalder du funktionen fra? Der mangler et kald til deldir($dir).

Hvor sætter du $_post['slet']? Den optræder ikke i formen. Desuden navngiver du den forkert i if-sætningen. Du har glemt _ (underscore)

Din action-attribut i formen er ikke udfyldt. Den skal pege på det dokument, der skal udføre en action med de POST-ede data, i dette tilfælde dokumentet selv.
Avatar billede dingkee Nybegynder
01. marts 2005 - 15:15 #7
Okay, tror jeg har fikset de 3 af dem...

Det eneste jeg mangler det er at finde ud af hvordan jeg kalder funktionen???

Jeg er ikke helt med på hvordan man kalder en funktion...

Det skal vel være noget med:
if ($side == "sletmappe"){
if(isset($_post['sletmappe'])) {
    deldir($dir)
    }
}
Avatar billede apache999 Nybegynder
01. marts 2005 - 15:56 #8
Det er nemlig helt korrekt.

Så nu fik du også lært, hvordan funktioner grundlæggende fungerer. Dem slipper du nok ikke helt uden om, hvis du vil kode PHP ;)

Man vil ofte placere sine funktioner i en separat fil (kald den fx functions.inc.php), som man så includer i alle de filer, der har brug for disse funktioner (vha. include("functions.inc.php");)
Avatar billede apache999 Nybegynder
01. marts 2005 - 15:57 #9
Hov. Du skal lige huske en semikolon efter dit funktionskald. Bare for god ordens skyld.
Avatar billede elskermad.dk Nybegynder
01. marts 2005 - 16:37 #10
mit svar var nu godt nok ;) men kan selvfølgelig godt forstå du hellere vil give point til en med tilhørende grundig forklaring!

(funktionen apache999 har kunne også findes på linket jeg skrev hvis du havde kigget)
Avatar billede dingkee Nybegynder
01. marts 2005 - 16:49 #11
Langt om længe fik jeg det til at funge :)

Mange tak for hjælpen... :)

Ja, elskermad.dk>> Fik en lidt dybere forklaring fra apache999 :)

apache999>> Svar = Point...
Avatar billede apache999 Nybegynder
01. marts 2005 - 16:51 #12
Selv tak, du.

God fornøjelse.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester