Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di semolino
    Registrato dal
    Nov 2004
    Messaggi
    1,499

    Rinominare file in upload

    Quando eseguo l'upload dei miei file mi sono accorto che se carico file aventi lo stesso nome, vengono sovrascritti. La cosa non mi gusta perchè nel caso in cui voglio eliminare l'immagine da un record, la stessa immagine mi si elimina in tutti i record.

    Come posso fare per rigenerare il nome del fil caricto? Oppure oltre al nome del file aggiungo un numero casuale che però non sarà mai uguale ad un altro.

  2. #2
    ti metto questo piccolo script che ho scritto adesso.


    codice:
    <?php
    $dir = "images/";
    $estensioni = array("image/jpeg","image/gif","image/pjpeg");
    if ($file['size'] > 1000000) { //non deve essere maggiore a circa 1 kb
    	echo "file è troppo grande";
    } elseif (!in_array($file["type"], $estensioni)) { // cerca un valore in array
    	echo "devi caricare solo immagini con estensione jpeg o gif
    ";
    } elseif (move_uploaded_file($file["tmp_name"], $dir.rand(1,1000).$file["name"].rand(1,1000))) {
    	echo "il file è stato caricato con sucesso";
    } else {
    	echo "errore";
    }
    ?>

  3. #3
    Utente di HTML.it L'avatar di semolino
    Registrato dal
    Nov 2004
    Messaggi
    1,499
    Molto interessante... potresti spiegarmi una cosa?
    Guarda io ho già uno script funzionante fatto cosi (anche io ho fatto tutti i controlli su peso ed estensio,ma non li metto nel post per far più chiarezza):
    Codice PHP:
    if (!file_exists($dir.$folder)) {    // se folder non esiste la crea!!!
         
    mkdir($dir.$folder0777); 
        
    $img $_FILES['image']['name'];        
        
    copy($_FILES['image']['tmp_name'], $dir.$folder.$img);
        
    unlink($_FILES['image']['tmp_name']); 
        
    createThumb($dir.$folder.$img$dir.$folder."thmb_".$img);
    } else { 
    $img $_FILES['image']['name'];        
    copy($_FILES['image']['tmp_name'], $dir.$folder.$img);
    unlink($_FILES['image']['tmp_name']); 
    createThumb($dir.$folder.$img$dir.$folder."thmb_".$img);
    }
      
    $sql 'INSERT INTO '$prefix .'immagini_video (titolo, descrizione, immagine, data, id_ltur) VALUES (\''.$titolo.'\',\''.$descrizione.'\',\''.$img.'\',NOW(),\''.$id_l.'\')';
    $query mysql_query($sql,$conn); 
    createThumb è una function che mi genera le due immagini, fatta cosi:
    Codice PHP:
    function createThumb($image$newname){    
        
    $size getimagesize ($image);    
        
    $height $size[1];
        
    $width $size[0];
        
        if (
    $width $height) {
            
    $newwidth 80;
            
    $newheight round(($height*80)/$width);
        } else {
            
    $newheight 80;
            
    $newwidth round(($width*80)/$height);    
        }
            
        
    $src imagecreatefromjpeg("$image");
        
    $im imagecreatetruecolor($newwidth,$newheight);
        
    imagecopyresampled($im,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
        
    imagejpeg($im$newname,50);
        
    imagedestroy($im);

    Ora a me interesserebee la parte del rand che mi hai scritto tu, ma vorrei capire come funziona. Dove dovrei intervenire io?
    Cosa fa esatamente
    (move_uploaded_file($file["tmp_name"], $dir.rand(1,1000).$file["name"].rand(1,1000)))?
    Grazie

  4. #4
    scusa, non avevo capito prima cosa ti serviva esattamente.

    Cmq move_uploaded_file() serve per fare upload di un file dal form sul disco del sito.


    Nel tuo caso metti rand() così:
    codice:
    createThumb($dir.$folder.$img, $dir.$folder.rand(1,1000)."thmb_".$img.rand(1,1000));

    Ti spiego perchè ho fatto così.
    Immgina che la variabile $img contiene questo valore:
    $img = "nome";
    Senza i rand che ho messo ti creava un immagine chiamata così:
    --> hmb_nome.jpg <--
    invece con i rand() crea così il nome della immagine
    --> 466_hmb_nome_235 <--
    DOve stanno i numeri saranno creati casualmente (random)
    Perchè ho messo 2 random?
    Perchè in questo modo è impossibile che vengono creati 2 file con lostesso nome.

    Spero di esserti stato d'aiuto.

    Cmq scusa ma non posso verificare i codici che ti sto scrivendo perchè oggi sto con il portatile e ha installato IIS per ASP.

    Domani torno al mio PC con IIS e Apache.

    Ciao ciao...

  5. #5
    Utente di HTML.it L'avatar di semolino
    Registrato dal
    Nov 2004
    Messaggi
    1,499
    Tranquillo non ti preoccupare... avevo già provato una cosa del geere, ma se ci fai caso la mia variabile
    $img ad esempio sarà ugiale a "foto.jpg"
    Se utilizzo il random come ho provato e mi hai consigliato, avrò un valore di questo tipo
    $img = "foto.jpg205"

    Capisci? il numero mi si inserisce dopo l'estensione.

  6. #6
    Utente di HTML.it L'avatar di semolino
    Registrato dal
    Nov 2004
    Messaggi
    1,499
    Ce l'ho fatta facendo cosi.
    $img = $_FILES['image']['name'];
    $img = rand(1,1000).$img;
    copy($_FILES['image']['tmp_name'], $dir.$folder.$img);
    unlink($_FILES['image']['tmp_name']);
    createThumb($dir.$folder.$img, $dir.$folder."thmb_".$img);
    Grazie di tutto

  7. #7
    si va bene anche così. Cmq ti consiglio di mettere 2 rand così è 100% che non si verificherà mai un nome 2 volte =:

    fai tipo.
    codice:
    $img = $_FILES['image']['name']; 
    $img = rand(0,999).rand(0.999).$img; 
    copy($_FILES['image']['tmp_name'], $dir.$folder.$img); 
    unlink($_FILES['image']['tmp_name']); 
    createThumb($dir.$folder.$img, $dir.$folder."thmb_".$img);
    in questo modo hai 2 random ed è impossibile che due volte escono uguali numeri per tutti due rando.

    Invece con una random è molto facile che escono 2 numeri =
    Figurati se poi crei più di 1000 immagini, sicuramente avrai circa 1000 immagini sovrascritte.

    ciao.

  8. #8
    Utente di HTML.it L'avatar di semolino
    Registrato dal
    Nov 2004
    Messaggi
    1,499

    fubbo sei ...
    come mai ora è 1,999
    invece di
    1,1000?

  9. #9
    visto che ho messo 2 rand() vicini uno all'altro.
    Se il numero casuale viene 1000 e 1000
    avrai un risultato del genere
    10001000nome_immagine
    e dirrei che sono un può troppi zerri.

    Invece con 999 e 999
    999999nome_immagine
    sono un può menu numeri
    cmq è =. Poi fare anmche 100 o anche 1000000000000

  10. #10
    Utente di HTML.it L'avatar di semolino
    Registrato dal
    Nov 2004
    Messaggi
    1,499
    prefetto, grazie

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.