+ Rispondi alla Discussione
Risultati da 1 a 22 di 22

rinominare immagini con nomi assurdi per fare upload

Ultimo Messaggio di centix il:
  1. #1
    User
    Data Registrazione
    Feb 2006
    Località
    Aerbero
    Messaggi
    45

    rinominare immagini con nomi assurdi per fare upload

    Vorrei fare un link in un forum che apre una finestra da cui è possibile caricare una foto nel server.

    Questa finestra poi fornisce il codice bb da utilizzare nel messaggio del forum per far apparire la immagine.

    Quello che mi perplime e che non so fare è la rinominazione delle immagini. E' possibile che gli utenti inviino foto contenenti caratteri strani nel nome, spazi e quant'altro.

    Io per adesso so rinominarle per esempio usando due numeri, uno relativo alla data timestamp ed uno generato random... in questo modo tolgo i caratteri cattivi e sono sicuro che una nuova foto non va a "coprire" una vecchia foto con lo stesso nome.

    Però così facendo mi perdo le eventuali keyword nel nome delle foto.

    Come potrei impostare la risoluzione del mio problema?
    In costruzione.

  2. #2
    User L'avatar di chalda
    Data Registrazione
    May 2006
    Località
    Primiero
    Messaggi
    88
    prova con la funzione htmlentities,
    oppure fai un cotrollo del tipo


    Codice:
    $nomefile_corretto="";
    for &#40;$i=0;$i<strlen&#40;$nomefile&#41;;$i++&#41;&#123;
        $c=strtolower&#40;substr&#40;$nomefile,$i,1&#41;&#41;;
        if &#40;
            &#40;&#40;asc&#40;$c&#41;>=asc&#40;'a'&#41;&#41; && &#40;asc&#40;$c&#41;<=asc&#40;'z'&#41;&#41;&#41; ||
            &#40;&#40;asc&#40;$c&#41;>=asc&#40;'0'&#41;&#41; && &#40;asc&#40;$c&#41;<=asc&#40;'9'&#41;&#41;&#41;
        &#41;
            $nomefile_corretto.=$c;
            
    &#125;
    Cosi il nome $nomefile_corretto conterrà solamente caratteri A-Z e 0-9.
    Se vuoi poi puoi inserire un else dopo l'if


    Codice:
          else   $nomefile_corretto.="_";
    in modo da convertire tutti gli altri caratteri in "_".

    Spero di aver capito la domanda e di esesrmi fatto capire...
    Non credo alle firme.

  3. #3
    User
    Data Registrazione
    Feb 2006
    Località
    Aerbero
    Messaggi
    45
    Miiii, grazie, si una cosa del genere tenere caratteri alfabetici "normali" e numeri e cambiare tutti gli altri in - (lo prefisco al _ ).

    Me lo guardo e poi se ho dubbi mi faccio risentire.
    Salve.
    In costruzione.

  4. #4
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    In pratica si crea la variabile nome dal file che si "tira su" dal form, si applica quella funzione e si da il nuovo nome all'immagine che verrà caricata nel server?

  5. #5
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Citazione Originariamente Scritto da chalda
    prova con la funzione htmlentities,
    oppure fai un cotrollo del tipo


    Codice:
    $nomefile_corretto="";
    for &#40;$i=0;$i<strlen&#40;$nomefile&#41;;$i++&#41;&#123;
        $c=strtolower&#40;substr&#40;$nomefile,$i,1&#41;&#41;;
        if &#40;
            &#40;&#40;asc&#40;$c&#41;>=asc&#40;'a'&#41;&#41; && &#40;asc&#40;$c&#41;<=asc&#40;'z'&#41;&#41;&#41; ||
            &#40;&#40;asc&#40;$c&#41;>=asc&#40;'0'&#41;&#41; && &#40;asc&#40;$c&#41;<=asc&#40;'9'&#41;&#41;&#41;
        &#41;
            $nomefile_corretto.=$c;
            
    &#125;
    Cosi il nome $nomefile_corretto conterrà solamente caratteri A-Z e 0-9.
    Se vuoi poi puoi inserire un else dopo l'if


    Codice:
          else   $nomefile_corretto.="_";
    [color=indigo]in modo da convertire tutti gli altri caratteri in "_".
    Allora il tuo script legge di quanti caratteri è la stringa e poi per quelnome ripete un ciclo che:
    - riduce a minuscolo tutti i caratteri (giusto??? c=strtolower(substr($nomefile,$i,1)); fa questo????);
    - se trova i caratteri da a a z e da 0 a 9 li lascia inalterati;
    - se trova un carattere diverso da quelli li sostituisce con un _ giusto?

    Quindi una foto con questo nome:

    !foto vacanza 12%.jpg

    poi diventa
    _foto_vacanza_12_.jpg

    Ho capito esatamente o st osparando una serie di cavolate?

  6. #6
    User L'avatar di chalda
    Data Registrazione
    May 2006
    Località
    Primiero
    Messaggi
    88
    Esatto.

    Un nome tipo

    !123~PrOva.jpG

    viene rinominato in

    _123_prova.jpg
    Non credo alle firme.

  7. #7
    User Attivo
    Data Registrazione
    Dec 2004
    Località
    abito sulla luna e ogni volta che mi telefono è un'interrurbana
    Messaggi
    2,413
    ti consiglio di tenerti via un contatore che aggiungerai al nome del file per creare l'univocità certa del nome del file.

    se riservi 5 caratteri per questo contatore hai a disposzione la posssibilità di caricare 99999 fotografie (che sono un bel numero).

    e non devi fare altro che concatenare il nome del file al numero generato dal tuo contatore (io uso l'id della tabella dove memorizzo i riferimenti).



  8. #8
    User
    Data Registrazione
    Feb 2006
    Località
    Aerbero
    Messaggi
    45

    giusto

    Perfetto.
    Infatti stavo pensando che per ogni foto dare la possibilità all'utente di inserire titolo della foto e quindi ho in mente di creare una tabella

    Ora devo vedere come fare il cambio di nome del file uando lo copio dalla cartella temporanea a quella di destinazione. Non so come fare ma mi leggo una guida.
    In costruzione.

  9. #9
    User Attivo
    Data Registrazione
    Dec 2004
    Località
    abito sulla luna e ogni volta che mi telefono è un'interrurbana
    Messaggi
    2,413
    google

    non amo rispondere solo con un link quindi aggiungo questa frasetta ma solo per dire che non c'è molto da aggiungere alla serp.



  10. #10
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Sto seguendo questa bella guida:
    http://www.webmasterpoint.org/php/tutorial/56.asp

    essa dopo aver fatto dei controlli sposta il file dalla dir temp a quella di destinazione e non ho capito se è a questo punto che deve intervenire un eventuale cambio del nome del file.

    Lo spostamnetio avviene tramite:
    Codice:
    copy&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;,"/finallocation/".$HTTP_POST_FILES&#91;'file'&#93;&#91;'name'&#93;&#41;;
    Supponendo che io abbia modificato il nome del file a monte come modifico la riga sopra?

    Supponiamo che il mio nuovo nome sia
    $nuovo_nome = "risultato della funzione precedente che cambia i caratteri"

    Non so se è sufficiente fare così:
    Codice:
    copy&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;,"/finallocation/".$nuovo_nome&#41;;
    di sicuro non ho scfitto la riga più giusta.

    Pnp.net invece sposta i file con:
    Codice:
     move_uploaded_file&#40;$tmp_name, "data/$name"&#41;;
    prima di tutto:
    che cosa cambia da copy a move? Il move poi consente di evitare lo unlink?

    E per il cambio nome in questo secondo caso?
    Basta fare:
    Codice:
     move_uploaded_file&#40;$tmp_name, "data/&#91;/b&#93;$nuovonome&#91;/b&#93;"&#41;;
    Fiducioso in illuminanti risposte colgo l'occasione per porgere un augurio di saporiti salumi veneti.

  11. #11
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Quindi così funziona e mi salva un file rinominato e nella cartella desiderata? ()

    Codice:
    $nomefile = $HTTP_POST_FILES&#91;'file'&#93;&#91;'name'&#93;;
    $nomefile_corretto=""; 
    for &#40;$i=0;$i<strlen&#40;$nomefile&#41;;$i++&#41;&#123; 
        $c=strtolower&#40;substr&#40;$nomefile,$i,1&#41;&#41;; 
        if &#40; 
            &#40;&#40;asc&#40;$c&#41;>=asc&#40;'a'&#41;&#41; && &#40;asc&#40;$c&#41;<=asc&#40;'z'&#41;&#41;&#41; || 
            &#40;&#40;asc&#40;$c&#41;>=asc&#40;'0'&#41;&#41; && &#40;asc&#40;$c&#41;<=asc&#40;'9'&#41;&#41;&#41; 
        &#41; 
        &#123;$nomefile_corretto.=$c;&#125;
    	else  
    	&#123;$nomefile_corretto.="-";&#125;
            
    &#125;
    copy&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nomefile_corretto&#41;;
    Io lo provo ragazzi.

    A proposito la variaile $categoria foto dipende da un radiobutton che l'utente sceglie quando invia le foto per "macrosuddividerle" in cartelle diverse.

    Prossimamente devo aggiungere a fine nome del file un ID unico per ogni foto.
    Ciauz.

  12. #12
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Mi da questo erroraccio:
    Fatal error: Call to undefined function: asc() in /home/vhosts/skiforum.it/var/www/html/skiforum/upload-save.php on line 51

    e la riga 51 è questa:
    Codice:
            &#40;&#40;asc&#40;$c&#41;>=asc&#40;'a'&#41;&#41; && &#40;asc&#40;$c&#41;<=asc&#40;'z'&#41;&#41;&#41; ||
    E poi un dubbio.

    Il ".jpg" finale della foto viene modificato?

  13. #13
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Ma asc che cosa è?
    Ho cercato php.net ma non ho trovat osia una funzione del PHP. Piuttosto sembra una cosa simile all'asc e desc dei comandi per mysql.

    Fatto sta che dopo un paio di settimane ancora non riesco a salvare i nomi delle foto in modo "furbo"

  14. #14
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Ho pensato di cambiare completamente strada e di usare questa funzione:
    Codice:
    #con funzione
    function make_url_friendly&#40;$url&#41; 
    &#123; 
    
        $url = strtolower&#40;$url&#41;; 
    
        $find = array&#40;' ', 
                '&', 
                '\r\n', 
                '\n', 
                '/', 
                '\\', 
                '+'&#41;; 
    
        $url = str_replace &#40;$find, '-', $url&#41;; 
    
        $find = array&#40;' ', 
                'é', 
                'è', 
                'ë', 
                'ê'&#41;; 
          
        $url = str_replace &#40;$find, 'e', $url&#41;; 
          
        $find = array&#40;' ', 
                'ó', 
                'ò', 
                'ô', 
                'ö'&#41;; 
          
        $url = str_replace &#40;$find, 'o', $url&#41;; 
          
        $find = array&#40;' ', 
                'á', 
                'à', 
                'â', 
                'ä'&#41;; 
          
        $url = str_replace &#40;$find, 'a', $url&#41;; 
          
        $find = array&#40;' ', 
                'í', 
                'ì', 
                'î', 
                'ï'&#41;; 
          
        $url = str_replace &#40;$find, 'i', $url&#41;; 
          
        $find = array&#40;' ', 
                'ú', 
                'ù', 
                'û', 
                'ü'&#41;; 
          
        $url = str_replace &#40;$find, 'u', $url&#41;; 
          
        $find = array&#40;'/&#91;^a-z0-9\-<>&#93;/', 
                '/&#91;\-&#93;+/', 
                '/<&#91;^>&#93;*>/'&#41;; 
    
        $repl = array&#40;'', 
                '-', 
                ''&#41;; 
    
        $url =  preg_replace &#40;$find, $repl, $url&#41;; 
    
        return $url; 
    
    &#125;
    $nome1 = make_url_friendly&#40;$nomefile&#41;;
    
    
    copy&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1&#41;;
    Funziona ma mi da un problema
    In pratica mi carica dei file senza estensione. Infatti converte il "." della estensione in un non spazio e perciò mi carica dei file del tipo:
    nome-correttojpg
    anzichè
    nome-corrett.jpg

    Come potrei agire?

  15. #15
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Ho capito come potrei fare.
    Basterebbe riuscire a dire allo script di NON cambiare i "." con un "nulla" ma nesì lasciarli ".".

    Come si fa?

  16. #16
    User Attivo L'avatar di massy
    Data Registrazione
    Mar 2006
    Località
    Pico
    Messaggi
    1,014
    Ciao.

    Al volissimo, credo che il problema sia qui:

    $find = array('/[^a-z0-9\-<>]/',
    '/[\-]+/',
    '/<[^>]*>/');

    $repl = array('',
    '-',
    '');

    $url = preg_replace ($find, $repl, $url);


    In pratica, se non ho preso un abbaglio, sostituisce qualunque cosa ce non sia lettera minuscola, numero, - < > in "" ossia in nulla. Quindi anche i punti

    Dovresti aggiungere \. in quella stringa per non avere problemi

  17. #17
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Citazione Originariamente Scritto da massy
    $find = array('/[^a-z0-9\-<>]/',
    '/[\-]+/',
    '/[\.]/'
    '/<[^>]*>/');

    $repl = array('',
    '-',
    '');

    $url = preg_replace ($find, $repl, $url);

    Va bene aggiunto in quel modo?
    Grazie infinite. Davvero un grosso problema per me.

  18. #18
    User Attivo L'avatar di massy
    Data Registrazione
    Mar 2006
    Località
    Pico
    Messaggi
    1,014


    Io pensavo ad una cosa del genere:

    $find = array('/[^a-z0-9\-<>\.]/',
    '/[\-]+/',
    '/<[^>]*>/');

    $repl = array('',
    '-',
    '');

    $url = preg_replace ($find, $repl, $url);


  19. #19
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862

    Proverò e vi saprò dire :)

    Proverò prima il tuo codice e vi saprò dire come funziona
    Davvero grazie

  20. #20
    Esperto L'avatar di centix
    Data Registrazione
    Oct 2005
    Località
    roma
    Messaggi
    611
    questo per rinominare il file se già esiste un file con lo stesso nome:
    Codice:
    $path="" // lasciare nullo o inserire la dir di upload
    $nome_file = $_FILES&#91;'UploadedFile'&#93;&#91;'name'&#93;;
    while &#40;file_exists&#40;$path.$nome_file &#41;&#41;  &#123;
    echo "<h4>Il file già esiste lo abbiamo rinominato</h4>";
    $nome_file = rand&#40;1,9&#41; . "-$nome_file" ; &#125;
    se il file già esiste aggiunge un numero random tra 1 e 9 un trattino e il nome originale:
    Codice:
    foto.jpg diventa 3-foto.jpg
    se un file con lo stesso nome è stato uploadato 9 volte e quindi tutti i random da 1 e 9 sono stati usati si avrà questa rinominazione:
    Codice:
    foto.jpg diventa 4-7-foto.jpg
    dove 4 e 7 sono random.
    Tavole Burton e Snowboard Italia e Ovindoli. Vacanza in Montagna estate e inverno.
    kitesurf-italia.com/ - Kitesurfing sport estremo con kite e surf

  21. #21
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Questa si che è un controllo estremamente interessante. Ora per evitare "doppioni" ho messo in testa al nome del file l'ID della riga nella quale il file verrà memorizzato.

    file_exist fa un controllo solamente sul nome del file oppure controlla proprio l'intero file?

    Cioè se metto due foto uguali ma con nome diverso me le becca? E c'è un modo per fare quest ocontrollo. Si eviterebbero i doppioni non voluti.

  22. #22
    Esperto L'avatar di centix
    Data Registrazione
    Oct 2005
    Località
    roma
    Messaggi
    611
    file_exist fa un controllo solamente sul nome del file oppure controlla proprio l'intero file?
    file_exists

    sono quasi certo che si limiti al solo controllo del nome e di certo se ci sono due file uguali con nomi diversi non te li scova.

    Per confrontare se due file hanno lo stesso contenuto potresti confrontare il contenuto degli stessi restituito da file_get_contents

    Oppure fare una ricerca su google per accorgersi che non è così semplice:
    compare files php
    Tavole Burton e Snowboard Italia e Ovindoli. Vacanza in Montagna estate e inverno.
    kitesurf-italia.com/ - Kitesurfing sport estremo con kite e surf

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.