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
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
Con "esista già" intendi se quella foto esiste (anche con nome differente), oppure se esiste già una immagine con quel nome?
Ciao!
regolamento altervista_______________ regolamento forum
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.
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
regolamento altervista_______________ regolamento forum
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
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
regolamento altervista_______________ regolamento forum
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
MondoWeb.net - Crea gratis il tuo forum
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
regolamento altervista_______________ regolamento forum
Il problema è che l'hash_file lo vorrei controllare prima di fare l'upload ma non funziona
Io prima definisco
poi eseguo l'upload ma non mi uppa il file.Codice:$hash = hash_file('md5', $_FILES["file"]["tmp_name"]);
Tolgo quella stringa e rifunziona. Non capisco...
MondoWeb.net - Crea gratis il tuo forum
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:
O meglio così:Codice PHP:
$hash = hash_file('md5', ini_get('upload_tmp_dir').$_FILES["file"]["tmp_name"]);
Ma non so se può funzionare, dipende se su av hanno lasciato la directory temporanea di default.Codice PHP:
$hash = hash_file('md5', '/tmp/'.$_FILES["file"]["tmp_name"]);
Ciao!
Ultima modifica di alemoppo : 06-12-2014 alle ore 22.10.36
regolamento altervista_______________ regolamento forum
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
Ho modificato la risposta sopra. Prova così ma non so se può andare.
Ciao!
regolamento altervista_______________ regolamento forum
Al termine dell'esecuzione lo script mi dice OK se il file adesso esiste nella cartella del sito o no.
Se definisconon lo uppa ma mi restituisce sia il valore di $hash che del tmp_name.Codice:$hash = md5_file($_FILES["file"]["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
Non so aiutarti. Prova con error_reporting(E_ALL) se ricevi qualche warning.
Ciao!
regolamento altervista_______________ regolamento forum
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