Avatar billede sibbelone Nybegynder
08. marts 2008 - 01:34 Der er 5 kommentarer

Sletning af mapper og filer dynamisk med php

Jeg har denne på siden

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 "<span class='mainHeader'>Filen \"$file\" er blevet slettet!</span><br>";
                    else echo "<span class='mainHeader'>Problemer med at slette filen \"$file\"!</span><br>";
                }
            }
        }
        closedir($dirhandle);
        chdir('..');
        if (rmdir($foldername)) echo "<span class='mainHeader'>Biblioteket \"$foldername\" er blevet slettet!</span><br>";
        else echo "<span class='mainHeader'>Problemer med at slette biblioteket \"$foldername\"!</span><br>";
    }
    else {
        echo "<span class='mainHeader'>Filen/mappen $foldername eksisterer ikke!</span>";
    }
}

$foldername = "../../kunder/".$data['mappe'];
RecurseDelete($foldername);

jeg er lidt i tvivl om den skal være på siden eller den skal ligge i en klasse, den sletter alle undermapper og filer men sletter altså ikke selve hovedmappen og den skulle gerne slettes også


jeg får følgende fejlmeddelse

Warning: rmdir() [function.rmdir]: Unable to access ../../kunder/hejsa in /var/www/websmeden.eu/test/cms/content/kundeadmin/redigerKunde.php on line 175

er det noget med skrive rettigheder eller ?
Avatar billede jakobdo Ekspert
08. marts 2008 - 07:49 #1
Hvordan er din struktur opbygget?
f.eks.:

/noget/slet/her/fra/
Og hvor er selve filen som sletter indholdet placeret ?

f.eks.:
/noget/slet/filer_som_sletter.php
Avatar billede sibbelone Nybegynder
08. marts 2008 - 10:40 #2
I roden ligger index og fra den kalder jeg følgende content/kundeadmin/opretKunde.php

opretKunde.php koder kommer her

<?session_start();
$kode = $_GET[kode];
?>
<link rel="stylesheet" href="../../css/fieldset.css" type="text/css" />
    <link rel="stylesheet" href="../../css/runde.css" type="text/css" />
    <link rel="stylesheet" href="../../css/text.css" type="text/css" />
   
<?
include('../../function/conection.php');
if ($_GET[trin]=="") {
   

echo "<table border='0' width='100%' cellspacing='0'>";


switch ($_GET[sorter]) {
case "navn":
  $sql = "SELECT * FROM cms_kunder WHERE brugerid = '$_SESSION[brugerid]' ORDER BY navn DESC";
  break;
case "adresse":
  $sql = "SELECT * FROM cms_kunder WHERE brugerid = '$_SESSION[brugerid]' ORDER BY adresse DESC";
  break;
case "postnr":
    $sql = "SELECT * FROM cms_kunder WHERE brugerid = '$_SESSION[brugerid]' ORDER BY postnr DESC";
  break;
case "by":
  $sql = "SELECT * FROM cms_kunder WHERE brugerid = '$_SESSION[brugerid]' ORDER BY bynavn DESC";
  break;
case "mail":
  $sql = "SELECT * FROM cms_kunder WHERE brugerid = '$_SESSION[brugerid]' ORDER BY mail DESC";
  break;
case "tlf":
  $sql = "SELECT * FROM cms_kunder WHERE brugerid = '$_SESSION[brugerid]' ORDER BY tlf DESC";
break;
  default:
$sql = "SELECT * FROM cms_kunder WHERE brugerid = '$_SESSION[brugerid]' ORDER BY kundeid DESC";
break;
}

$result = mysql_query($sql);

echo "<tr>
            <td class='top'><a href='redigerKunde.php?sorter=reg&kode=$kode' class='topTable'>Navn</td>
            <td class='top'><a href='redigerKunde.php?sorter=adresse&kode=$kode' class='topTable'>Adresse</td>
            <td class='top'><a href='redigerKunde.php?sorter=postnr&kode=$kode' class='topTable'>Post nr</td>
            <td class='top'><a href='redigerKunde.php?sorter=by&kode=$kode' class='topTable'>By</td>
            <td class='top'><a href='redigerKunde.php?sorter=tlf&kode=$kode' class='topTable'>Tlf.</td>
            <td class='top'><a href='redigerKunde.php?sorter=mail&kode=$kode' class='topTable'>Email</td>
            <td class='topTableNoLink'>Slet</td>
            <td class='topTableNoLink'>Rediger</td>";
           

while ($row = mysql_fetch_array($result)){
    if ($color=='#ffffff') {
    $color='#f1f1f1';
}    
    else {
        $color='#ffffff';
    }
echo "<tr bgcolor=$color><td>".$row[navn]."</td>";
echo "<td>".$row[adresse]."</td>";
echo "<td>".$row[postnr]."</td>";
echo  "<td>".$row[bynavn]."</td>";
echo  "<td>".$row[tlf]."</td>";
echo  "<td>".$row[mail]."</td>";
echo  "<td><a href='redigerKunde.php?trin=3&amp;kundeid=$row[kundeid]'  class='topTable'>Slet</td>";
echo  "<td><a href='opretKunde.php'  class='topTable'>Rediger</td>";
echo "</tr>";
    }
echo "</table>";
if ($_GET[besked]!="") {
   
echo "<br /><span class='mainHeader'>Kunde er nu slette fra databasen</span>";
}}
if ($_GET[trin]==2) {
    echo "det virker sku trin 2";
    echo  "<td><a href='redigerKunde.php?trin='  class='topTable'>Retur til tabellen</td>";
    echo  "<td><a href='opretKunde.php?trin=3'  class='topTable'>Trin 3</td>";
   
   
   
//Fortryd  bare en lille funktion så man kan fortryde trin 3   
}if ($_GET[trin]==3) {?>
    <span class="mainHeader"">Bekræfte sletning kunde</span><br /><br />
<?
$id = $_GET[kundeid];
$foresp = mysql_query("SELECT * FROM cms_kunder WHERE kundeid = '$id'");
$data = mysql_fetch_array($foresp)?>

<?include("../../include/round1_start_b.php");?>
 
<span class="topTable">Her skal du bekræftige at du vil slette nedenstående kunde </span>
        <br /><br /><span class="mainHeaderBig""><?echo ucfirst($data[navn])?></span>
        <br /><?echo ucfirst($data[adresse])?>
        <br /><?echo $data[postnr]?> <?echo $data[bynavn]?>
        <br /><?echo $data[tlf]?>
        <br /><?echo $data[mail]?>                   
        <br /><br />Hvis du er helt sikker på at du vil slette kunden skal
        du nu trykke på slet, og kunden vil blive slettet permanent
        <br />Du skal være opmærksom på at du også sletter alle felter i databasen samt fjerne mapperne på serveren.</td>
                           
<?
$id = $_GET[kundeid];
echo "<br /><br /><a href='redigerKunde.php' class='topTable'>Fortryd</a>| <a href='redigerKunde.php?id=$id&amp;trin=4' class='topTable'> Slet</a>";
?>

<?include("../../include/round1_slut_b.php");?>

<?}?>

<?
include('../../function/conection.php');
    if ($_GET[trin]==4) {
       
//Her henete jeg fra databae så jeg ved havd mappenavnet er       
$sql =    mysql_query("SELECT mappe FROM cms_kunder WHERE kundeid = '$id'");
$data = mysql_fetch_array($sql)    ;


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 "<span class='mainHeader'>Filen \"$file\" er blevet slettet!</span><br>";
                    else echo "<span class='mainHeader'>Problemer med at slette filen \"$file\"!</span><br>";
                }
            }
        }
        closedir($dirhandle);
        chdir('..');
        if (rmdir($foldername)) echo "<span class='mainHeader'>Biblioteket \"$foldername\" er blevet slettet!</span><br>";
        else echo "<span class='mainHeader'>Problemer med at slette biblioteket \"$foldername\"!</span><br>";
    }
    else {
        echo "<span class='mainHeader'>Filen/mappen $foldername eksisterer ikke!</span>";
    }
}

$foldername = "../../kunder/".$data['mappe'];
RecurseDelete($foldername);

       
        $id = $_GET['id'];
    mysql_query("DELETE FROM cms_kunder  WHERE kundeid = '$id'");
?>


<script type="text/javascript" language="javascript">
window.location='redigerKunde.php?besked=slet';
</script>
<?}?>

Jeg har også i roden en mappe der hedder kunder og i den generere jeg nogle nye mapper og filer dynamisk med et php script og det er disse mapper der skal fjernes.
men jeg tror nu at stiebne er i orden for alle underliggende mapper og filer bliver slettet

mappestrukturen er som følger
Inde i kunder ligger jeg

kundenavn (skal indeholde alle kunder) i kundemappen ligger jeg hver gange der oprettes en kunde, 4 andre mapper og to filer ind,  i den ene af de mapper liggerjeg 4 filer ind.
cmod på alle mapper er 755

Men alle dissse mapper slettes på nær den første og det kan jeg ikke forstå


håber at det var det du havde brug for
Avatar billede jakobdo Ekspert
08. marts 2008 - 11:29 #3
Prøv evt. en anden slette funktion, denne er fundet på dk.php.net/unlink

<?php
// ggarciaa at gmail dot com (04-July-2007 01:57)
// I needed to empty a directory, but keeping it
// so I slightly modified the contribution from
// stefano at takys dot it (28-Dec-2005 11:57)
// A short but powerfull recursive function
// that works also if the dirs contain hidden files
//
// $dir = the target directory
// $DeleteMe = if true delete also $dir, if false leave it alone

function SureRemoveDir($dir, $DeleteMe) {
    if(!$dh = @opendir($dir)) return;
    while (false !== ($obj = readdir($dh))) {
        if($obj=='.' || $obj=='..') continue;
        if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
    }

    closedir($dh);
    if ($DeleteMe){
        @rmdir($dir);
    }
}

//SureRemoveDir('EmptyMe', false);
//SureRemoveDir('RemoveMe', true);

?>
Avatar billede sibbelone Nybegynder
08. marts 2008 - 12:52 #4
nope virke slet ikke
Avatar billede jakobdo Ekspert
11. april 2008 - 12:20 #5
Når du skriver det ikke virker, hvordan virker ikke?
Kommer der fejl eller sletter den bare ikke indholdet/mapperne ?
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