Visualizzazione risultati 1 fino 15 di 15
Like Tree3Likes
  • 1 Post By Alessandro1
  • 1 Post By alemoppo
  • 1 Post By alemoppo

Discussione: Upload immagini: controllare prima se esiste già

  1. #1
    L'avatar di Alessandro1
    Alessandro1 non è connesso Utente storico
    Data registrazione
    22-04-2003
    Residenza
    Milano
    Messaggi
    2,483

    Question Upload immagini: controllare prima se esiste già

    Ciao a tutti,
    ho uno script che permette di caricare le immagini sul mio sito. Volevo sapere se avete qualche idea per far si che prima di effettuare l'upload, lo script controlli che l'immagine non esista già nella cartella del sito.
    Grazie
    MondoWeb.net - Crea gratis il tuo forum

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Con "esista già" intendi se quella foto esiste (anche con nome differente), oppure se esiste già una immagine con quel nome?

    Ciao!

  3. #3
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Magari un loop su tutti i file con file_get_contents()?
    Però bada che coi file immagine, ad un minimo tocco, il contenuto cambia.

    In alternativa potresti salvare una stringa che identifichi il contenuto di ciascun file all'upload in un database, ma dubito sia semplice, in quanto i file immagine non sono ascii.
    Perché con l'accento grave è inguardabile.

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Esiste la hash_file(), per solo i nomi la file_exists(), ma dipende da cosa vuol fare.

    Ciao!
    Ultima modifica di alemoppo : 05-12-2014 alle ore 17.19.01
    Alessandro1 likes this.

  5. #5
    L'avatar di Alessandro1
    Alessandro1 non è connesso Utente storico
    Data registrazione
    22-04-2003
    Residenza
    Milano
    Messaggi
    2,483

    Predefinito

    Grazie per le risposte. Intendo se la foto esiste; il nome non posso verificarlo perchè viene generato casualmente dal sistema. A me interessa che l'utente X non ricarichi la stessa foto che ha appena caricato: il nome (generato dal sistema) è salvato nel database quindi posso ricavarlo con un SELECT.
    Ultima modifica di Alessandro1 : 05-12-2014 alle ore 23.01.00
    MondoWeb.net - Crea gratis il tuo forum

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Ok, quindi potresti confrontare gli hash di tutti i file presenti nella tua directory con quello del file in questione. Come operazione però potrebbe prendere un po' di tempo, se hai molte immagini nella directory. Quindi ti consiglierei prima di calcolare gli hash, di guardare se esiste un file con le dimensioni della immagine da voler uppare, con filesize(), e poi se trovi qualche corrispondenza, controllare gli hash.

    Nel tuo caso, non sarebbe male a questo punto salvare anche l'hash dell'immagine nel database che dicevi, così puoi fare una SELECT WHERE hash=hash_file(immagine_da_controllare) senza dover fare quello che ho scritto sopra.

    Ciao!
    Ultima modifica di alemoppo : 05-12-2014 alle ore 23.40.58
    Alessandro1 likes this.

  7. #7
    L'avatar di Alessandro1
    Alessandro1 non è connesso Utente storico
    Data registrazione
    22-04-2003
    Residenza
    Milano
    Messaggi
    2,483

    Cool

    Grazie mille alemoppo :) Sei stato molto disponibile e utile!!

    Anche dopo 11 anni di permanenza, Altervista rimane sempre la mia community preferita!

    Mi sembra che la funzione sia la stessa di "md5_file"... perchè io optavo per l'md5 non conoscendone uno solo numerico (e quindi più veloce nella lettura nel db).
    Ultima modifica di Alessandro1 : 06-12-2014 alle ore 20.22.32
    alemoppo likes this.
    MondoWeb.net - Crea gratis il tuo forum

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Citazione Originalmente inviato da Alessandro1 Visualizza messaggio
    Mi sembra che la funzione sia la stessa di "md5_file"... perchè io optavo per l'md5 non conoscendone uno solo numerico (e quindi più veloce nella lettura nel db).
    Sì è vero, se fosse solo numerico sarebbe meglio. Però tieni conto che un hash solo numerico della stessa lunghezza di un hash alfanumerico ha molto più rischio di collisione in caso di file differenti. Quindi si potrebbe pensare di aumentare le cifre dell'hash, ma per avere una sicurezza di circa quella dell'hash alfanumerico dovresti avere un numero enorme: tanto conviene tenersi l'hash alfanumerico (alla fine quel che conta sono i bit, quindi che rappresentano cifre o caratteri è la stessa cosa; è soltanto un'astrazione)

    Comunque dipende dal tuo sito: se non hai troppe immagini, potresti provare a salvare soltanto le cifre dell'hash e scartare i caratteri (una porcata, ma dipende dal numero delle immagini). Se però confronti anche la dimensione dei file, forse è abbastanza sicuro (puoi anche includere la dimensione del file nell'hash concatenandolo oppure in qualche altro modo che vuoi per rendere più robusto l'hash). Non so dirti nello specifico. Vedi tu...

    EDIT:

    Ah, guarda la crc32(), anche se alla fine un numero a 32bit sarebbe l'equivalente di 4 caratteri. Direi non proprio sicuro come un hash alfanumerico!

    Ciao!
    Ultima modifica di alemoppo : 06-12-2014 alle ore 20.51.48

  9. #9
    L'avatar di Alessandro1
    Alessandro1 non è connesso Utente storico
    Data registrazione
    22-04-2003
    Residenza
    Milano
    Messaggi
    2,483

    Predefinito

    Il problema è che l'hash_file lo vorrei controllare prima di fare l'upload ma non funziona

    Io prima definisco
    Codice:
    $hash = hash_file('md5', $_FILES["file"]["tmp_name"]);
    poi eseguo l'upload ma non mi uppa il file.
    Tolgo quella stringa e rifunziona. Non capisco...
    MondoWeb.net - Crea gratis il tuo forum

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Citazione Originalmente inviato da Alessandro1 Visualizza messaggio
    Il problema è che l'hash_file lo vorrei controllare prima di fare l'upload
    Come puoi far l'hash di un file senza nemmeno averlo? Prima sei costretto a far l'upload, purtroppo... A meno che non fai qualcosa con javascript.

    In generale, $_FILES["file"]["tmp_name"] rappresenta il file già uppato, quindi lo hai già. Il problema può essere che tu andando a cercare il file $_FILES["file"]["tmp_name"] passi alla hash_file un nome di un file che però non è nel tuo spazio! Quindi non esiste.

    Prova con il percorso della cartella temporanea, del tipo:

    Codice PHP:
    $hash = hash_file('md5', ini_get('upload_tmp_dir').$_FILES["file"]["tmp_name"]);
    O meglio così:
    Codice PHP:
    $hash = hash_file('md5', '/tmp/'.$_FILES["file"]["tmp_name"]);
    Ma non so se può funzionare, dipende se su av hanno lasciato la directory temporanea di default.

    Ciao!
    Ultima modifica di alemoppo : 06-12-2014 alle ore 22.10.36

  11. #11
    L'avatar di Alessandro1
    Alessandro1 non è connesso Utente storico
    Data registrazione
    22-04-2003
    Residenza
    Milano
    Messaggi
    2,483

    Predefinito

    Ce la posso fare, abbi pazienza eh :)
    Mi sono espresso male. L'utente invia la richiesta di upload. Abbiamo $_FILES["file"]["tmp_name"]. Prima di eseguire imagecreatefromgif, imagecopyresized, imagegif definisco $hash, controllo se esiste nel database; non esiste e quindi tento di eseguire quei comandi ma non funziona.
    Vado a mangiare poi continuo a lavorarci su... non capisco; è una questione di principio :)
    MondoWeb.net - Crea gratis il tuo forum

  12. #12
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Ho modificato la risposta sopra. Prova così ma non so se può andare.

    Ciao!

  13. #13
    L'avatar di Alessandro1
    Alessandro1 non è connesso Utente storico
    Data registrazione
    22-04-2003
    Residenza
    Milano
    Messaggi
    2,483

    Predefinito

    Al termine dell'esecuzione lo script mi dice OK se il file adesso esiste nella cartella del sito o no.
    Se definisco
    Codice:
    $hash = md5_file($_FILES["file"]["tmp_name"]);
    non lo uppa ma mi restituisce sia il valore di $hash che del tmp_name.

    Se non lo definisco (con prima //) mi uppa il file.

    Sembra come se quando esegui quella funziona modifichi il file e non te lo fa uppare.

    Ultima modifica di Alessandro1 : 06-12-2014 alle ore 22.53.23
    MondoWeb.net - Crea gratis il tuo forum

  14. #14
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Non so aiutarti. Prova con error_reporting(E_ALL) se ricevi qualche warning.

    Ciao!

  15. #15
    L'avatar di Alessandro1
    Alessandro1 non è connesso Utente storico
    Data registrazione
    22-04-2003
    Residenza
    Milano
    Messaggi
    2,483

    Predefinito

    E' proprio un problema della funzione di upload :(
    Ho fatto la semplice prova di fare l'upload dei nostri avatar (.png) e non funziona, altre foto si... bo... altro problema quindi.
    MondoWeb.net - Crea gratis il tuo forum

Regole di scrittura

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