Visualizzazione risultati 1 fino 4 di 4

Discussione: unlink di determinati valori

  1. #1
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito unlink di determinati valori

    Mi servirebbe un consiglio sull'eliminazione di file ormai obsoleti all'interno di una specifica cartella.

    Sostanzialmente la situazione è questa.
    Ho due tabelle MySql: una File, all'interno della quale c'è tutta la lista di file a cui è associato un ID; una seconda chiamata File_Utente, all'interno della quale c'è l'ID del File associato a un utente.

    Come prima cosa stavo pensando di creare una lista che mi facesse visualizzare tutti i FILE che non sono più associati a FILE_UTENTE.

    Codice PHP:
    SELECT File.IDFile, File.Nome
    FROM File
    LEFT JOIN File_Utente
    ON File
    .IDFile = File_Utente.IDFile
    WHERE File_Utente
    .IDFile IS NULL
    ORDER BY File
    .Nome ASC
    Con un ciclo while stampo l'elenco a cui associo una checkbox per selezionare:

    Codice PHP:
    <input type="checkbox" name="item[]" value ="<?=$rs["IDFile"] ?>">
    [...]
    <input type="submit" name="cancellaselezione" class="ares" Value="Cancella selezione"></form>
    Da qui il mio dubbio: come posso cancellare le immagini, presenti nella cartella /immagini/file, di questi file da cancellare?
    Io stavo pensando:

    Codice PHP:
    if ($op=="cancellaselezione") {
    $basedir = 'immagini/file';
    $fileregex='/\.(gif)$/';

    f ($basedir and is_dir($basedir) and $fileregex) {

    $all = opendir($basedir);
    while (
    $file = readdir($all)) {
    if (
    preg_match($fileregex,$file)) {

    $MySql = "SELECT * FROM File WHERE Img = '".pars($file)."' AND IDFile = $IDFile";
    $Result = mysql_query($MySql);
    if (!(
    $rs = mysql_fetch_array($Result))) {
    unlink($basedir.'/'.$file);
    echo
    '<font color=red>';
    echo
    $file;
    echo
    ' cancellato!</font>';
    }
    $rs->close;
    echo
    '<br>';
    }
    }
    }
    closedir($all);
    unset(
    $all);
    In questo modo, però, mi cancella tutti i file in GIF.
    E seconda cosa: come posso ampliare $fileregex anche ad altri formati (png, jpg, jpeg ecc)?
    Ultima modifica di personalthings : 12-04-2019 alle ore 11.37.21

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    come posso cancellare le immagini [...] di questi file da cancellare?
    Cosa intendi per "immagine di un file"?
    L'espressione regolare non ti serve: il solo fatto che il file sia presente nella base di dati è condizione sufficiente a passare il controllo con preg_match (e se non è così significa che devi rivedere le cose a monte...).

    I suggerimenti che do più spesso:


  3. #3
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Intendo dire che all'interno della tabella File c'è un campo chiamato Img, la cui immagine è presente all'interno di una directory il cui percorso è: /immagini/file.

    Nel momento in cui la condizione ID di File non risulta esistere in File_Utente, quell'ID viene eliminato in File (e fin qui tutto okay) inclusa l'immagine in quel percorso (problema principale)

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Un'alternativa è effettuare la cancellazione dell'immagine contestualmente alla cancellazione dell'ID.

    Altrimenti va bene questo garbage collecting come lo stai realizzando, solo non hai bisogno dell'espressione regolare. Ti basta leggere dalla base di dati i percorsi di tutte le immagini associate a File non associati a nessun Utente e cancellarli.

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •