- Home
- Categorie
- Coding e Sistemistica
- PHP
- rinominare immagini con nomi assurdi per fare upload
-
prova con la funzione [url=http://www.php.net/htmlentities]htmlentities,
oppure fai un cotrollo del tipo$nomefile_corretto=""; for ($i=0;$i<strlen($nomefile);$i++){ $c=strtolower(substr($nomefile,$i,1)); if ( ((asc($c)>=asc('a')) && (asc($c)<=asc('z'))) || ((asc($c)>=asc('0')) && (asc($c)<=asc('9'))) ) $nomefile_corretto.=$c; }
Cosi il nome $nomefile_corretto conterrà solamente caratteri A-Z e 0-9.
Se vuoi poi puoi inserire un else dopo l'ifelse $nomefile_corretto.="_";
in modo da convertire tutti gli altri caratteri in "_".
Spero di aver capito la domanda e di esesrmi fatto capire...
-
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 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?
-
@chalda said:
prova con la funzione [url=http://www.php.net/htmlentities]htmlentities,
oppure fai un cotrollo del tipo$nomefile_corretto=""; for ($i=0;$i<strlen($nomefile);$i++){ $c=strtolower(substr($nomefile,$i,1)); if ( ((asc($c)>=asc('a')) && (asc($c)<=asc('z'))) || ((asc($c)>=asc('0')) && (asc($c)<=asc('9'))) ) $nomefile_corretto.=$c; }
Cosi il nome $nomefile_corretto conterrà solamente caratteri A-Z e 0-9.
Se vuoi poi puoi inserire un else dopo l'ifelse $nomefile_corretto.="_";
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.jpgHo capito esatamente o st osparando una serie di cavolate?
-
Esatto.
Un nome tipo
!123~PrOva.jpG
viene rinominato in
**
_123_prova.jpg**
-
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).
-
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 tabellaOra devo vedere come fare il cambio di nome del file uando lo copio dalla cartella temporanea a quella di destinazione. Non so come fare :bho: ma mi leggo una guida.
-
[url=http://www.google.it/search?q=file+upload+php&start=0&ie=utf-8&hl=it&oe=utf-8&client=firefox-a&rls=org.mozillaofficial]google
non amo rispondere solo con un link quindi aggiungo questa frasetta ma solo per dire che non c'è molto da aggiungere alla serp.
-
Sto seguendo questa bella guida:
http://www.webmasterpoint.org/php/tutorial/56.aspessa 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:
copy($HTTP_POST_FILES['file']['tmp_name'],"/finallocation/".$HTTP_POST_FILES['file']['name']);
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ì:
copy($HTTP_POST_FILES['file']['tmp_name'],"/finallocation/".$nuovo_nome); ``` di sicuro non ho scfitto la riga più giusta. Pnp.net invece sposta i file con:
move_uploaded_file($tmp_name, "data/$name");
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:
move_uploaded_file($tmp_name, "data/[/b]$nuovonome[/b]");
Fiducioso in illuminanti risposte colgo l'occasione per porgere un augurio di saporiti salumi veneti.
-
Quindi così funziona e mi salva un file rinominato e nella cartella desiderata? ()
$nomefile = $HTTP_POST_FILES['file']['name']; $nomefile_corretto=""; for ($i=0;$i<strlen($nomefile);$i++){ $c=strtolower(substr($nomefile,$i,1)); if ( ((asc($c)>=asc('a')) && (asc($c)<=asc('z'))) || ((asc($c)>=asc('0')) && (asc($c)<=asc('9'))) ) {$nomefile_corretto.=$c;} else {$nomefile_corretto.="-";} } copy($HTTP_POST_FILES['file']['tmp_name'],"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nomefile_corretto);
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.
-
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 51e la riga 51 è questa:
((asc($c)>=asc('a')) && (asc($c)<=asc('z'))) ||
E poi un dubbio.
Il ".jpg" finale della foto viene modificato?
-
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"
-
Ho pensato di cambiare completamente strada e di usare questa funzione:
#con funzione function make_url_friendly($url) { $url = strtolower($url); $find = array(' ', '&', '\r\n', '\n', '/', '\\', '+'); $url = str_replace ($find, '-', $url); $find = array(' ', 'é', 'è', 'ë', 'ê'); $url = str_replace ($find, 'e', $url); $find = array(' ', 'ó', 'ò', 'ô', 'ö'); $url = str_replace ($find, 'o', $url); $find = array(' ', 'á', 'à', 'â', 'ä'); $url = str_replace ($find, 'a', $url); $find = array(' ', 'í', 'ì', 'î', 'ï'); $url = str_replace ($find, 'i', $url); $find = array(' ', 'ú', 'ù', 'û', 'ü'); $url = str_replace ($find, 'u', $url); $find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/'); $repl = array('', '-', ''); $url = preg_replace ($find, $repl, $url); return $url; } $nome1 = make_url_friendly($nomefile); copy($HTTP_POST_FILES['file']['tmp_name'],"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1);
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.jpgCome potrei agire?
-
Ho capito come potrei fare.
Basterebbe riuscire a dire allo script di NON cambiare i "." con un "nulla" ma nesì lasciarli ".".Come si fa?
-
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
-
@massy said:
$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.
-
Io pensavo ad una cosa del genere:
$find = array('/[^a-z0-9-<>.]/',
'/[-]+/',
'/<[^>]*>/');$repl = array('',
'-',
'');$url = preg_replace ($find, $repl, $url);
-
Proverò prima il tuo codice e vi saprò dire come funziona
Davvero grazie
-
questo per rinominare il file se già esiste un file con lo stesso nome:
$path="" // lasciare nullo o inserire la dir di upload $nome_file = $_FILES['UploadedFile']['name']; while (file_exists($path.$nome_file )) { echo "<h4>Il file già esiste lo abbiamo rinominato</h4>"; $nome_file = rand(1,9) . "-$nome_file" ; }
se il file già esiste aggiunge un numero random tra 1 e 9 un trattino e il nome originale:
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:
foto.jpg diventa 4-7-foto.jpg
dove 4 e 7 sono random.
-
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.