• User

    Funzione elimina dir( cartella) non và..

    Buon giorno, ho preso da php.net una funzione che dovrebbe eliminare la cartella, però non capisco come mai, non debba funzionare...
    Altra domanda, se in una cartella ho altre sottocartelle, con al loro interno altri file, è possibile con la funzione che sto per postare, eliminare in un colpo solo tutta la cartella padre ed il suo contenuto?

    
     
    $dir = "../public/strumenti/";//valore che indica la cartella$DirStr = trim($_GET['DirStr']);$f = $dir.$DirStr;function deltree( $f ){    if( is_dir( $f ) ){        foreach( scandir( $f ) as $item ){            if( !strcmp( $item, '.' ) || !strcmp( $item, '..' ) )                 continue;                    deltree( $f . "/" . $item );        }            rmdir( $f );        echo "<script language=\"javascript1.2\">		alert(\"CARTELLA ELIMINATA CON SUCCESSO!\");		location.href=\"?Up_s_m=1&c_sf=$c_sf\";	    </script>";    }    else{        unlink( $f );    }} 
    
    

    Praticamente nemmeno entra dentro la funzione...
    Se potete cortesemente....grazie mille


  • User

    devi eliminare prima il contenuto delle sottodirectory
    io ho risolto cosi:
    [php]
    function rmfile($nome,$path){
    $MAINPATH="../../../";
    $dirname=$MAINPATH.$path.'/'.$nome;
    $result='Objects removed:\n';

    if (is_dir($dirname)) {

    if (substr($dirname,-1)!='/') {$dirname.='/';}

    $handle = opendir($dirname);
    while (false !== ($file = readdir($handle))) {
    if ($file!='.' && $file!= '..') {
    $per = $dirname.$file;
    if (is_dir($per)) {
    $result.=$this->rmSubs($per);
    }else{
    unlink($per);
    $result.='Rmoved: '.$per.'.\n';
    }
    }
    }
    closedir($handle);
    rmdir($dirname);
    $result.='Removed: '.$dirname.'.\n';
    return $result;
    }else if(is_file($dirname)){
    unlink($dirname);
    return 'Removed: '.$dirname;
    }else{
    return 'error';
    }
    }

    function rmSubs($sub){
    $rsp='Sub-Object Removed:\n';
    if(is_dir($sub)){
    if (substr($sub,-1)!='/') {$sub.='/';}
    $subhand=opendir($sub);

    while(false!==($dir=readdir($subhand))){
    $rep=$sub.$dir;
    if($dir!='.' && $dir!='..'){
    if(is_dir($rep)){
    $rsp.=$this->rmSubs($rep);
    }else{
    unlink($rep);
    $rsp.='removed '.$dir.'.\n';
    }
    }
    }
    closedir($subhand);
    rmdir($sub);
    $rsp.='Removed: '.$sub.'.\n';
    }else{
    return 'error';
    }

    }
    [/php]


  • User

    Grazie mille...però devo sapere la path assoluta giusto?
    E la ottengo in questo modo : $_SERVER["DOCUMENT_ROOT"] ed i permessi li setto a 0777.giusto?


  • User

    no non ti serve la document root tu basta che la variabile $MAINPATH dell'esempio la setti sulla posizione 'root' che scegli...

    esempio la classe per cancellare le directory si trova in canc.php nella cartella sito.it/classes/
    e vuoi cancellare una cartella nel percorso sito.it/cartella/da/cancellare
    setti $MAINPATH='../'


  • Moderatore

    per i chmod si devi settarli 😉


  • User

    se il server è tuo o hai privilegi sufficenti puoi anche ricorrere a comandi sulla shell tramite php


  • User

    vi ringrazio per la risposta, ma vi volevo chiedere in base a questa funzione.

    Nei parametri $nome e $path qui (function rmfile($nome,$path){)

    in nome inserisco il nome della cartella e la path, si
    riferisce all'indirizzo fisico di dove risiede la cartella
    che voglio eliminare.Giusto?

    e poi qui $MAINPATH="../../../"; inserisco la path per arrivare alla
    cartella.Giusto?

    Ho il sito su aruba.it e l'hosting è windows/linux quindi
    l'unica cartella con i permessi per fare cio che voglio è la
    PUBLIC.

    Quindi, ricapitolando, $MAINPATH="../public/"

    function rmfile($chitarra,$strumenti){

    ti descrivo il contenuto, della cartella strumenti:

      • chitarra[INDENT]
    • - tmb(subdirectory)[/INDENT][INDENT][INDENT]
      
    •     - foto1.jpg
      
      • foto2.jpg[/INDENT][/INDENT] [INDENT]
      • web(subdirectory)[/INDENT] [INDENT][INDENT]
      • foto1.jpg
      • foto2.jpg[/INDENT][/INDENT]
      • chitarra.txt
      • batteria[INDENT]
    • - tmb(subdirectory)[/INDENT] [INDENT][INDENT]
      
    •     - foto1.jpg
      
      • foto2.jpg[/INDENT][/INDENT] [INDENT]
      • web(subdirectory)[/INDENT] [INDENT][INDENT]
      • foto1.jpg
      • foto2.jpg[/INDENT][/INDENT]
      • batteria.txt
      • basso[INDENT]
    • - tmb(subdirectory)[/INDENT] [INDENT][INDENT]
      
    •     - foto1.jpg
      
      • foto2.jpg[/INDENT][/INDENT] [INDENT]
      • web(subdirectory)[/INDENT] [INDENT][INDENT]
      • foto1.jpg
      • foto2.jpg[/INDENT][/INDENT]
      • basso.txt
        Mi dite se come ho settato la MAINPATH ed $nome e $path è corretto?

    Grazie mille....molto gentili


  • User

    purtroppo non mi funziona, ho fatto cosi:

    
    $nome = str_replace(" ", "_",$_POST['CartellaStrumento']);
     //echo "Cartella: " . $cartella;
     $path = "../public/strumenti";
     //echo "C: " . $path. "/" . $nome;
      echo "Si";
     function rmfile($nome,$path){
      $MAINPATH="../../";
      $dirname=$MAINPATH.$path.'/'.$nome;
      echo "Dir: " . $dirname;
      //$dirname=$path.'/'.$nome;
      $result='Objects removed:\n';
      
      if (is_dir($dirname)) {
      
       if (substr($dirname,-1)!='/') {
        $dirname.='/';
       }
       $handle = opendir($dirname);
     
       while (false !== ($file = readdir($handle))) {
        if ($file!='.' && $file!= '..') {
         $per = $dirname.$file;
         if (is_dir($per)) {   
          $result.=$this->rmSubs($per);
         }
         else{
          unlink($per);
          $result.='Rmoved: '.$per.'.\n';
         }
        }
       }
       closedir($handle);
       rmdir($dirname);
       $result.='Removed: '.$dirname.'.\n';
       return $result; 
      }
      elseif(is_file($dirname)){
       unlink($dirname);
       return 'Removed: '.$dirname;
      }
      else{
       return 'error';
      }
     }
      
     function rmSubs($sub){
      $rsp='Sub-Object Removed:\n';
      if(is_dir($sub)){
       if (substr($sub,-1)!='/') {
        $sub.='/';
       }
       $subhand=opendir($sub);
      
       while(false!==($dir=readdir($subhand))){
        $rep=$sub.$dir;
        if($dir!='.' && $dir!='..'){
         if(is_dir($rep)){
          $rsp.=$this->rmSubs($rep);
         }
         else{
          unlink($rep);
          $rsp.='removed '.$dir.'.\n';
         }
        }
       }
       closedir($subhand);
       rmdir($sub);
       $rsp.='Removed: '.$sub.'.\n';
      }
      else{
       return 'error';
      }
     } 
     
    
    

    in pratica non mi entra dentro la funzione...potete dirmi per favore come mai e qual'è l'errore?

    Grazie milllllllleeee


  • User

    buon giorno ragazzi, potete dirmi per favore come mai non mi funziona?
    Vi prego...è troppo importante...
    grazie a tutti....


  • User

    Ragazzi, ma non sapete come mai non mi funziona?cos'è che devo guardare?a cosa devo far caso?Vi prego è importante...


  • User

    ci riprovo, scusate la mia ignoranza, ma non ci riesco...vi prego!!!