Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    cancellare un' immagine da una directory e rinominare le immagini restanti

    Ciao a tutti e buone feste,
    come da oggetto avrei bisogno di eliminare un' immagine da una directory e rinominare in ordine crescente le immagini che rimangono.
    Ho provato a fare così:

    Codice PHP:
    if(isset($_GET['del'])){// recupero la variabile che discrimina la scelta
            
    $eliminato 0// variabile di conferma
            
    $nome_bg $_GET['del'].".jpg"// nome del file completo di estensione
            
    $directory "../immagini/sfondi/"// directory dove si trovano gli sfondi
            
    $fildel $directory.$nome_bg// percorso completo del file da cancellare
            
    if (unlink($fildel)){ // cancello il file
                // devo rinomiare i restanti file con una numerazione progressiva
                
    if(is_dir($directory)){ 
                      
    $dir opendir($directory); // apro la directory
                      
    $i 1// inizializzo a 1 la variabile $i
                     
    while(false !== ($file readdir($dir))){ // finchè non ho finito di leggere tutti i files della directory
                        
    if($file != "." && $file != ".."){ // se il file in questione non è . o .. 
                             
    rename($directory.$file$directory."bg_" $i ".jpg"); // lo rinomino
                            
    $i++; // incremento $i
                          
    }
                    }
                }
                
    $eliminato 1// cambio a 1 la variabile di conferma
            
    // fine if di cancellazione del file
        

    Succede però una cosa strana, vengono eliminati un buon numero di immagini e le restanti non vengono rinominate...

    Grazie a chiunque passi di qua.
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  2. #2
    Mi permetto di fare un UP post sbornia di capodanno e faccio gli auguri a tutti: buon 2014
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  3. #3
    Ultimo UP lo giuro... solo che è veramente strano, ho riprovato in mille modi e probabilmente rifaccio sempre lo stesso errore...
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    Ciao!

    Puoi fare un esempio del contenuto esatto di
    codice:
    $fildel = $directory.$nome_bg;
    ?
    Cosa sono questi?
    codice:
    if($file != "." && $file != "..")



  5. #5
    Grazie per la risposta.
    $fildel = $directory.$nome_bg; è il file da cancellare comprensivo di percorso. VIene passato via GET da un' altra pagina ed eliminato tramite unlink, ho verificato che venga passato correttamente stampandolo a video e non vi sono problemi. Se uso solo unlink($fildel); questo viene correttamente cancellato, lui e solo lui.

    la condizione nell' if verifica che il file sia effettivamente un file. Forse è un pò ridondante, la trovo spesso però quando si elencano file di una directory
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Io ho provato il tuo codice e mi sembra che funzioni correttamente, cancella il file con il nome che hai passato da GET e rinomina gli altri
    l'unica differenza è che io ho messo la cartella "sfondi" in una sottocartella rispetto al file che contiene lo script da eseguire
    forse serve centrare meglio qual è il comportamento errato che si manifesta

  7. #7
    Sono queste le cose che ti bloccano per giorni... Comunque la soluzione era semplice:
    supponiamo di avere alcune immagini in una cartella, una deve essere cancellata e le altre rinominate come le precedenti in sequenza. Ma inevitabilmente si verificherà che un file inizierà ad avere il nome di un file gìà presente ecc.
    Un pò come il gioco delle Torri di Hanoi ho pensato che fosse necessario risolvere con 2 cicli while, uno che rinomina i file restanti in sequenza con un nome temporaneo e l'altro che riporta i file al nome che mi serve.

    Grazie a tutti e ancora Buon Anno
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    Quote Originariamente inviata da carlaravelli Visualizza il messaggio
    Ma inevitabilmente si verificherà che un file inizierà ad avere il nome di un file gìà presente ecc.
    Un pò come il gioco delle Torri di Hanoi ho pensato che fosse necessario risolvere con 2 cicli while, uno che rinomina i file restanti in sequenza con un nome temporaneo e l'altro che riporta i file al nome che mi serve.

    è il peggior modo di farlo credo! se a quanto ho capito i tuoi nomi sono numeri (o stringhe costanti + numeri), puoi sfruttare l'ordinamento e evitare il problema...Oppure in ogni caso basta usare un ordinamento di stringhe (che so, quello alfabetico)...
    Nel peggiore dei casi (e non so bene cosa stai facendo) ti basta dare un nome temporaneo a UN solo file, rinominare gli altri e poi risistemare quello.

    Così fai fare un lavoro inutile, lento, eccessivo e raddoppi la potenzialità di errori!

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    codice:
    $listafile={primo,secondo,terzo,quarto}
    $handle1=$listafile[0];
    $handle2;//puoi anche non dichiararla, o puoi metterla uguale a quello che vuoi, cambia niente
    rename($listafile[0];'_temp');
    for($i=1;$i<4;++$i){
     $handle2=$listafile[$i];
     rename($listafile[$i];$handle1);
     $handle1=$handle2;
    }
    rename($listafile[0];$handle1);
    dove rename è un'ipotetica funzione che prende in input il nome del file da rinominare e il nome da dargli... ovviamente poi te l'adatti

  10. #10
    Non ho ben capito il codice, lo commento per vedere se ho capito bene:
    Codice PHP:
    $listafile={primo,secondo,terzo,quarto// diciamo che metto in un array i nomi delle immagini
    // in realtà come avevi intuito, le immagini hanno un nome del tipo bg_XX.jpg SEMPRE
    $handle1=$listafile[0]; // $handle1 == primo (in questo caso)
    $handle2;// è una variabile
    rename($listafile[0];'_temp'); // il vettore $listafile diventa (_temp,secondo,terzo,quarto)
    for($i=1;$i<4;++$i){ // ciclo per quanti sono gli elementi di $listafile escluso quello di posto 0
     
    $handle2=$listafile[$i]; // al primo ciclo è $handle2 == secondo
     
    rename($listafile[$i];$handle1); // La funzione rinomina il file che si chiamava secondo in primo
     
    $handle1=$handle2// $handle1 == secondo
    // alla fine del ciclo dovrei avere rinominato i files in _temp primo secondo terzo
    // e una variabile $handle1 == quarto
    rename($listafile[0];$handle1); // rinomino il file _temp in quarto 
    alla fine ho rinominato i file come erano prima o mi sbaglio? se dopo la cancellazione ne avevo eliminato
    uno allora esso sarà sempre mancante... Sicuramente ho capito male qualcosa!
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.