- Home
- Categorie
- Coding e Sistemistica
- PHP
- Funzione elimina dir( cartella) non và..
-
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
-
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]
-
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?
-
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='../'
-
per i chmod si devi settarli
-
se il server è tuo o hai privilegi sufficenti puoi anche ricorrere a comandi sulla shell tramite php
-
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?
- basso.txt
Grazie mille....molto gentili
-
-
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
-
buon giorno ragazzi, potete dirmi per favore come mai non mi funziona?
Vi prego...è troppo importante...
grazie a tutti....
-
Ragazzi, ma non sapete come mai non mi funziona?cos'è che devo guardare?a cosa devo far caso?Vi prego è importante...
-
ci riprovo, scusate la mia ignoranza, ma non ci riesco...vi prego!!!