Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di puja
    Registrato dal
    May 2013
    Messaggi
    46

    uploads: dare nomi univoci ai files caricati

    Ciao a tutti,

    sto lavorando a questo sistema di upload. Al momento, senza tanti problemi, mi permette di salvare e ridimensionare le immagini in una cartella chiamata con il nome dell'user.

    All'interno di questa cartella salvo poi l'immagine che a sua volta sarà composta dal nome utente e dalla data in cui è stata salvata e poi la ridimensiono. Fino a qua tutto bene.


    Codice PHP:

    $PippoCheVisitaIlSito 
    $unavariabiledisessione;

    $newfilename $PippoCheVisitaIlSito date("_dmYHi");


    if (
    is_dir($_SERVER['DOCUMENT_ROOT'].'/foto/'."/".$PippoCheVisitaIlSito) != ($_SERVER['DOCUMENT_ROOT'].'/docs/foto/'."/".$PippoCheVisitaIlSito)) //in modo un po' rudimentale controllo che la cartella non esista già, in caso contrario la creo. 

    mkdir($_SERVER['DOCUMENT_ROOT'].'/docs/foto/'."/".$PippoCheVisitaIlSito0777); } 

    move_uploaded_file($this->file['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/foto'."/".$PippoCheVisitaIlSito."/".$newfilename.".jpg"); 
    Il problema sorge qualora un utente dovesse salvare due foto in rapida successione.. Qui c'è il rischio che venga sovrascritta .. Pensavo di aggiungere al nome un piccolo valore che incrementa ogni volta che una foto viene caricata ma non capisco come fare qualche consiglio?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Beh, a meno che PippoCheVisitaIlSito abbia 2 o più browser aperti ed invii un'immagine da ogniuno di essi, la vedo dura che in un secondo possa inviare più di un'immagine.
    Va anche considerato il tempo dell'upload, inviare un file non avviene istantaneamente, dipende dalla dimensione del file.
    File diversi impiegheranno tempo diverso, quindi anche facendo il giochetto di inviare file contemporaneamente da più browser rende abbastanza improbabile il nome uguale per file diversi.

    Ad ogni modo se vuoi proprio essere sicuro, fa così: quando fai l'upload di un file, prima di fare il move_uploaded_file(), genera il nome, verifica nel db se già esiste (metti i nomi nel db giusto? Se non lo fai dovrai leggere i nomi dei file nella cartella di destinazione), se esiste ci appenendi per esempio _1, ricontrolli se esiste, se esiste appendi _2 al posto di _1 e così via, tanto di questi controlli ne verranno fatti ben pochi, al massimo verrà appeso _1 e poi andrà bene.

    Una volta che hai il nome buono esegui il move_uploaded_file() col nome valido per il file.

  3. #3
    Utente di HTML.it L'avatar di puja
    Registrato dal
    May 2013
    Messaggi
    46
    mmm

    Però
    Codice PHP:
    date("_dmYHi"
    riporta un valore al minuto, non al secondo.

    Se ci fosse un sistema per includere i secondi mi basterebbe. Ora provo a scoprire se esiste.

    Altrimenti userò il tuo sistema che mi pare il migliore.

    Grazie mille,

    ciao

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Se hai visto come la documentazione della funzione date() avrai visto che per i secondi si usa s, quindi
    date("_dmYHis")

  5. #5
    Utente di HTML.it L'avatar di puja
    Registrato dal
    May 2013
    Messaggi
    46
    esattamente

    grazie mille ciao

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Penso non voglia avere un nome chilometrico, anche perché se sta costruendo il nome in questo modo e non con nomi a caso vuol mantenere un certo ordine, altrimenti gli basterebbe chiamare i file

    $newfilename = $PippoCheVisitaIlSito . microtime();

    così, se supportato dal sistema, avrebbe una precisione al microsecondo.

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Originariamente inviato da raven74
    ... e microtime non è supportata da tutti i sistemi.
    Infatti ho precisato "se supportato dal sistema".

  8. #8
    esiste anche uniqid();

    Questa volta, più che un voto.. è favoreggiamento.

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.