Avatar billede netstuff.dk Nybegynder
09. august 2002 - 21:28 Der er 15 kommentarer og
1 løsning

Slet mappe + indhold..

bruger denne lille kode til at slette en mappe med i PHP:

    $dir = realpath("G:\\brugere\\" . $username);
    rmdir($dir) or die("<pre>error deleting dir: <b>$dir</b></pre>");

Hvis der fx. er en fil eller en anden mappe i den mappe jeg vil slette så vil min kode ikke slette mappen.. min kode vil altså KUN slette tomme mapper :(.. hvordan fixer jeg det så den også sletter fyldte mapper ?

// Kasper :)
Avatar billede frosig Nybegynder
09. august 2002 - 21:35 #1
Kig her...

http://www.php.net/manual/en/function.rmdir.php

Der er nogen flinke mennesker, der er kommet med en løsning, der også sletter fyldte biblioteker
Avatar billede netstuff.dk Nybegynder
09. august 2002 - 21:36 #2
leder efter en som kan lave koden for mig .. ikke vise mig den.. vil du ikke sætte koden sammen for mig så er du flink :)..

// Kasper
Avatar billede netstuff.dk Nybegynder
09. august 2002 - 21:41 #3
koden der skal bruges er vel denne her:

<?php
function delete($file) {
chmod($file,0777);
if (is_dir($file)) {
  $handle = opendir($file);
  while($filename = readdir($handle)) {
  if ($filename != "." && $filename != "..")
{
    delete($file."/".$filename);
  }
  }
  closedir($handle);
  rmdir($file);
} else {
  unlink($file);
}
}
delete("ordnername");
?>

men hvordan gør jeg så den sletter mappen "G:\\brugere\\" . $username

// Kasper
Avatar billede frosig Nybegynder
09. august 2002 - 21:42 #4
Kan du ikke bare bruge en af de funktioner, som de foreslår? F.eks.

function force_rmdirs($dir) {
      $dh = opendir($dir);
      while(false !== ($file = readdir($dh))) {
          if($file != '.' && $file != '..') {
              $path = $dir.'/'.$file;
              if(is_dir($path)) force_rmdirs($path);
              else unlink($path);
          }
      }
      closedir($dh ); // this line is added
      return rmdir($dir);
  }

Det hele er lavet for dig... Du bliver nødt til at lave det som en funktion, så den kan kaldes rekursivt (funktionen kalder sig selv). Jeg har ikke testet det, men det ser ud til at virke.
Avatar billede ztyxx Nybegynder
09. august 2002 - 21:44 #5
for at slette en fil kan du bruge
unlink('fil.php')
Avatar billede frosig Nybegynder
09. august 2002 - 21:46 #6
Du skal kalde funktionen med det dir, som skal slettes... F.eks.

force_rmdirs("g:\\brugere\\".$username);
Avatar billede tipsen Nybegynder
09. august 2002 - 21:47 #7
Lavede selv denne funktion til samme formål på et tidspunkt:

function RecurseDelete($foldername) {
    if (file_exists($foldername)) {
        chmod($foldername, 0777);
        chdir($foldername);
        $dirhandle = opendir('.');
        while ($file = readdir($dirhandle)) {
            if ($file != "." && $file != "..") {
                if (is_dir($file)) {
                    RecurseDelete($file);
                }
                else {
                    if (unlink($file)) echo "Filen \"$file\" er blevet slettet!<br>";
                    else echo "Problemer med at slette filen \"$file\"!<br>";
                }
            }
        }
        closedir($dirhandle);
        chdir('..');
        if (rmdir($foldername)) echo "Biblioteket \"$foldername\" er blevet slettet!<br>";
        else echo "Problemer med at slette biblioteket \"$foldername\"!<br>";
    }
    else {
        echo "Filen/mappen $foldername eksisterer ikke!";
    }
}

$folder = "./mappenavn";
RecurseDelete($folder);

-sørg for at du bruger den på de rigtige biblioteker! Den giver også lidt output, så du kan følge med i hvad der sker!
Avatar billede netstuff.dk Nybegynder
09. august 2002 - 21:53 #8
nu ser min kode sådan ud:

    $dir = realpath("G:\\frip.dk\\brugere\\" . $username);

    function force_rmdirs($dir) {
              $dh = opendir($dir);
              while(false !== ($file = readdir($dh))) {
                if($file != '.' && $file != '..') {
                      $path = $dir.'/'.$file;
                      if(is_dir($path)) force_rmdirs($path);
                      else unlink($path);
              }
          }
      closedir($dh );
      return rmdir($dir);
  }

og det virker ikke..

// Kasper (jeg er DÅRLIG til PHP så hjælp lige lidt plz :))
Avatar billede frosig Nybegynder
09. august 2002 - 22:04 #9
Læg funktionen force_rmdirs($dir)

function force_rmdirs($dir) {
              $dh = opendir($dir);
              while(false !== ($file = readdir($dh))) {
                if($file != '.' && $file != '..') {
                      $path = $dir.'/'.$file;
                      if(is_dir($path)) force_rmdirs($path);
                      else unlink($path);
              }
          }
      closedir($dh );
      return rmdir($dir);
  }

i starten af din side... Så kan du, når du vil benytte dig af den, kalde den ved at skrive

force_rmdirs(("G:\\frip.dk\\brugere\\" . $username);

et eller andet sted i din kode. En funktion er noget kode, der ikke bliver udført, når siden indlæses, men først når den kaldes ligesom ovenfor. En funktion er meget smart, hvis man enten bruger den samme kode flere gange, så slipper man for at skrive det samme igen og igen, eller når man skal lave det så funktionen kalder sig selv. Du kan se, at den gør det i linie 6 i funktionen.

Man kan også lægge sine funktioner i et dokument for sig selv, og så bruge f.eks.

require("function.php");

i starten af de sider, der skal bruge funktionerne (I dette tilfælde ville den side, som funktionerne var i, hedde function.php

Jeg håber, at du forstår brugen af funktioner lidt bedre nu, ellers må du bare spørge igen :-)
Avatar billede netstuff.dk Nybegynder
09. august 2002 - 22:11 #10
nu ser hele min kode sådan ud og det virker ikke:

<?php
    require("../config.php");

    # sletter bruger fra database
    if (isset($delete)) {
        $query = mysql_query("DELETE FROM users WHERE id = '$delete'");
   
    # sletter brugermappe

    function force_rmdirs($dir) {
          $dir = realpath("G:\\brugere\\" . $username);
              $dh = opendir($dir);
              while(false !== ($file = readdir($dh))) {
                if($file != '.' && $file != '..') {
                      $path = $dir.'/'.$file;
                      if(is_dir($path)) force_rmdirs($path);
                      else unlink($path);
              }
          }
          closedir($dh );
          return rmdir($dir);
  }

}

?>
Avatar billede netstuff.dk Nybegynder
09. august 2002 - 22:11 #11
og stien ER korrekt!..
Avatar billede tipsen Nybegynder
09. august 2002 - 22:19 #12
har du prøvet min udgave - den er tidligere brugt med succes :-)
Avatar billede netstuff.dk Nybegynder
09. august 2002 - 22:21 #13
kan du ikke rette den til for mig så ?.. således at den sletter $dir.. og så skal den heller ikke komme og sige mappen er slettet eller noget.. den skal ikke komme med nogen besked...
Avatar billede tipsen Nybegynder
09. august 2002 - 22:24 #14
unction RecurseDelete($foldername) {
    if (file_exists($foldername)) {
        chmod($foldername, 0777);
        chdir($foldername);
        $dirhandle = opendir('.');
        while ($file = readdir($dirhandle)) {
            if ($file != "." && $file != "..") {
                if (is_dir($file)) {
                    RecurseDelete($file);
                }
                else {
                    unlink($file);
                }
            }
        }
        closedir($dirhandle);
        chdir('..');
        rmdir($foldername);
    }
    else {
        echo "Filen/mappen $foldername eksisterer ikke!";
    }
}

RecurseDelete($dir);
Avatar billede netstuff.dk Nybegynder
09. august 2002 - 22:33 #15
det virkede tipsen :).. takker
Avatar billede tipsen Nybegynder
09. august 2002 - 22:45 #16
Det var så lidt :-)
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