$_GET['del'] cosa contiene?
il vettore non ti serve, era solo d'esempio
$_GET['del'] cosa contiene?
il vettore non ti serve, era solo d'esempio
$_GET['del'] contiene il nome del file da cancellare privo di estensione, in pratica nella pagina che elenca le immagini presenti sul server, a ciascuna immagine è associato un link del tipo elimina.php?del=bg_XX dove al posto di XX vi è un numero. I numeri devono essere sempre ordinati e sempre a partire da 1, per altri motivi. Così la pagina di elimina.php (che contiene il codice di cui stiamo parlando) oltre a provvedere ad eliminare il file (dopo avergli dato l'estensione e la giusta posizione sul server) deve rinominare i file restanti con un nome bg_XX on le caratteristiche sopracitate.
Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it
Codice PHP:if(isset($_GET['del'])){// è un numero o è una stringa tipo bg_7 o bg_7.jpg?
//se è una stringa del tipo bg_NUMERO usi $k=split('bg_',$_GET['del'],2)[1];
//->>>>puoi evitare losplit passando direttamente il numero in GET, ma devi rivedere il tuo sistema
//ALTRIMENTI $k=$_GET['del'];
$eliminato = 0;
$nome_bg = $_GET['del'].".jpg";
$directory = "../immagini/sfondi/";
$fildel = $directory.$nome_bg;
$i=0;//IMPORTANTE
if (unlink($fildel)){
//if(is_dir($directory)){->lo saprai se è una cartella o no*
$dir = opendir($directory); // apro la directory FIN QUI TUTTO OK!!!!!!!!!!!!!!!!
while (false !== ($file = readdir($directory))) {//li conti
if ($file != "." && $file != "..") {
$file = $directory.'/'.$file;
if(is_file($file)){
++$i;
}
}
}
$j=$k;
while($j<=$i){//parti da quello successivo a quello eliminato
$file = $directory.$j.".jpg" ;
rename($directory.$file, $directory."bg_" . $j-1 . ".jpg"); // lo rinomino e gli do il nome del primo, ciascuno successivo potrà prendere il nome del precedente perchè sarà l'unico a chiamarsi così
++$j;
}
//}VEDI SOPRA*
$eliminato = 1; // cambio a 1 la variabile di conferma
} // fine if di cancellazione del file
}
Ultima modifica di SimoX90; 07-01-2014 a 19:26
Nel frattempo mi avevi risposto
allora devi usare
$k=split('bg_',$_GET['del'],2)[1];
Sarebbe meglio (risparmi operazioni) passare in GET solo il numero, con
elimina.php?del=XX (togli il bg_)
e poi lo aggiungi qui
$nome_bg ="bg_".$_GET['del'].".jpg"; (nel codice che ti ho postato)
dal punto di vista computazionale unire delle stringhe è molto più veloce che splittarne una (ogni carattere è considerato come elemento di un array ed è un casino trovare i pezzi), inoltre, per quanto ridicolo, riduci di ben 24 bit la lunghezza dei tuoi url (anche questo è un risparmio)
In generale, il codice che ti ho postato rinomina 0 file nel caso migliore (eliminato l'ultimo), ne rinomina la metà del tuo nel caso peggiore (il file eliminato è il primo)
Ultima modifica di SimoX90; 07-01-2014 a 19:20
Ti ringrazio veramente, questi si che sono consigli preziosi. Anche io avevo optato per utilizzare due cicli while, ma questi, come mi spieghi, sono decisamente più efficienti, dal momento che io invece rinomino in tutti i casi sempre tutti i files presenti 2 volte, a prescindere dal file che elimino.
Grazie ancora
Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it