Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 60
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37

    Eliminare immagini in una cartella se non presenti nel DB

    Un saluto a tutti,

    visto il lievitare della mia cartella "immagini prodotti" vorrei eliminare delle immagini ormai obsolete, ma non so come fare!

    I dati che ho in possesso sono:

    DB

    tabella = articoli
    colonna = Attivo
    colonna = NomeImmagine

    ROOT
    cartella = Prodotti

    Il mio intendo sarebbe quello di eliminare tutte le immagini nella cartella che sul DB sono Attivo=0 e NomeImmagine vuoto

    Potete darmi un aiuto?
    Grazie
    3nrico

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Provo a scriverti un algoritmo, poi traducilo in php:
    - leggi i nomi dei file nella cartella immagini e mettili in un array
    - cicla sull'array leggendo un nome di file alla volta
    - per ogni nome di file "SELECT * FROM tabella_coi_nomi_delle_immagini WHERE NomeImmagine = nome_file_corrente"
    - se la query non trova corrispondenze nel db cancella il file

    Il fatto di controllare se attivo sia 0 non credo sia così importante, se il nome del file non è presente dovrebbe voler automaticamente dire che la relativa immagine non è in uso, in caso contrario aggiungi un "AND attivo = 0" alla query.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37
    grazie della dritta, ma il mio problema maggiore è quello di tradurlo in php, ma se chiedo troppo ti ringrazio ugualmente

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ho scritto al volo questo codice, non l'ho provato, quindi potrebbe esserci qualche errore.
    Questo controlla la stessa cartella in cui si trova il file php, puoi decidere tu quale cartella fargli controllare modificando la variabile $dir e passando il giusto percorso e nome file alla funzione is_file
    Codice PHP:
    <?php
        $immagini 
    = array();
        
    $dir ".";
        
    $files scandir($dir); //leggo il contenuto della cartella corrente
        
    foreach($files as $file) { //per ogni elemento trovato
            
    if(is_file($file)) { //se è un file
                
    $immagini[] = $file//lo aggiungo in un array che conterrà solo file
            
    }
        }
        foreach(
    $immagini as $img) { //per ogni file nell'array
            
    $query "SELECT * FROM tabella WHERE immagine = $img"//cerco nel db una entry con tale file
            
    $result mysql_query($query); //effettuo la query
            
    if(mysql_num_rows($result) == 0) { //se non trovo niente
                
    unset($img); //cancello il file
            
    }
        }
    ?>

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37
    Ecco il risultato:

    Ho aggiunto una pagina php (CheckImage.php) nella cartella immagini (Prodotti) la quale contiene 2.953 immagini.

    Nella pagina ho scritto questo codice:

    Codice PHP:
    1. <?php
    2.     $immagini 
    = array();
    3.     $dir ".";
    4.     $files scandir($dir); //leggo il contenuto della cartella corrente
    5.     foreach($files as $file) { //per ogni elemento trovato
    6.         if(is_file($file)) { //se è un file
    7.             $immagini[] = $file//lo aggiungo in un array che conterrà solo file
    8.         }
    9.     }
    10.     foreach($immagini as $img) { //per ogni file nell'array
    11.         $query "SELECT * FROM tabella WHERE immagine = $img"//cerco nel db una entry con tale file
    12.         $result mysql_query($query); //effettuo la query
    13.         if(mysql_num_rows($result) == 0) { //se non trovo niente
    14.             unset($img); //cancello il file
    15.         }
    16.    }
    17. ?>
    Quando eseguo la pagina mi esce questo errore ripetuto per 2.953 righe (quante sono le immagini nella cartella):

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/mywebsite.com/UserFiles/Image/Prodotti/CheckImage.php on line 13

    Consigli?
    Thanks

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Questo perché non c'è la parte di codice che si connette al db, non l'ho scritta per brevità, ma deve esserci se non c'è una connessione già aperta.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37
    so che chiedo troppo, un esempio di connessione?

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Codice PHP:
    $conn mysql_connect($host$user$pass) or die('Impossibile stabilire una connessione col database');
    mysql_select_db($dbname,$conn) or die('Impossibile selezionare il database'); 

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37
    ok connessione riuscita adesso gli errori:

    mysql_num_rows(): supplied argument is not a valid MySQL result resource
    Error Type: E_WARNING
    Source File: /var/www/mywebsite/UserFiles/Image/Prodotti/CheckImage.php Line: 16

    Codice PHP:
    Line 11:            }
    Line 12:        }
    Line 13:        foreach($immagini as $img) { //per ogni file nell'array
    Line 14:            $query "SELECT * FROM articolo WHERE NomeImmagine = $img AND Attivo = 0"//cerco nel db una entry con tale file
    Line 15:            $result mysql_query($query); //effettuo la query
    Line 16:            if(mysql_num_rows($result) == 0) { //se non trovo niente
    Line 17:                unset($img); //cancello il file
    Line 18:            }
    Line 19:        }
    Line 20:    ?> 

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Molto probabilmente fallisce la query.
    Prova a stamparla con un echo e vedi se è corretta, prova anche a mettere gli apici attorno a $img.

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.