Domande su upload files

marco_rx

Utente Attivo
19 Dic 2010
129
0
0
Ciao volevo porvi due domande:
1 - Cambia qualcosa (a livello di prestazioni o simili) nel memorizzare migliaia di immagini in più cartelle o in una unica?
2 - Se in fase di upload avessi bisogno di rinominare un'immagine assegnandogli un nome univoco quale funzione potrei utilizzare?

Grazie per l'aiuto
 
A livello di prestazioni credo che se i path sono dello stesso tipo [vedi esempio] la velocità per aprire ciao.jpg è uguale a quella per aprire nuova.jpg.
(ad esempio:
1) /immagini/galleria/fotoutente/ciao.jpg
2) /immagini/galleria/foto/nuova.jpg
)
Ovvio che se una foto è situata in una cartella come nell'esempio precedente e invece per arrivare all'altra bisogna passare da 10 (si fa per dire) altre sottocartelle la velocità cala (ma a occhio nudo non credo si riesca ad accorgersene).

Per quanto riguarda il nome univoco puoi benissimo inserire un campo autoincrement nella tabella DB (se ce l'hai) dove salvi i path delle immagini che vai a controllare ed incrementare prima di rinominare l'immagine uplodata :D

spero di esserti stato utile
 
ciao
forse marco_rx intendeva con nome unico per non sovrascrivere l'immagine, in tal caso potrebbe

PHP:
<?php
//...
$nome_file="pinco_pallo.jpg";//prob. da input tipo file
$cartella="mia_cartella/";//se esiste
if(file_exists($cartella.$nome_file)){
	echo "il file esiste, scegli un altro nome";
	//....
}else{
	//uploda il file ......
}
//....
?>
 
A livello di prestazioni credo che se i path sono dello stesso tipo [vedi esempio] la velocità per aprire ciao.jpg è uguale a quella per aprire nuova.jpg.
(ad esempio:
1) /immagini/galleria/fotoutente/ciao.jpg
2) /immagini/galleria/foto/nuova.jpg
)
Ovvio che se una foto è situata in una cartella come nell'esempio precedente e invece per arrivare all'altra bisogna passare da 10 (si fa per dire) altre sottocartelle la velocità cala (ma a occhio nudo non credo si riesca ad accorgersene).
Più o meno quello che pensavo io, ma non essendo sicuro ho preferito chiedere, grazie per la risposta :D

ciao
forse marco_rx intendeva con nome unico per non sovrascrivere l'immagine, in tal caso potrebbe

PHP:
<?php
//...
$nome_file="pinco_pallo.jpg";//prob. da input tipo file
$cartella="mia_cartella/";//se esiste
if(file_exists($cartella.$nome_file)){
	echo "il file esiste, scegli un altro nome";
	//....
}else{
	//uploda il file ......
}
//....
?>

Si ma preferivo rinominare indipendentemente dall'esistenza del file. Avevo scritto questa funzione che non dovrebbe generare una stessa stringa più di una volta, però volevo sapere se esisteva una funzione nativa di php che facesse lo stesso:

PHP:
function generate_name()
{
    $chars = 'abcdefghijklmnopqrstuvwxyz';
    $string = '';
    for ($i=0; $i<10; $i++)
    {
        $string .= substr($chars, rand(0, strlen($chars) - 1), 1);
    }

    $time = time();
    $name = '';

    for ($i=0; $i<10; $i++)
    {
        $position = substr($time, $i, 1);
        $name .= substr($string, $position, 1);
    }

    return $name;
}
 
Se usi un database la cosa più pulita è inserire un contatore autoincrement e nominarle in modo crescente.
Altrimenti potresti fare come hai postato tu (la tua soluzione non è sicura al 100% ma al 99.9% in quanto è molto raro che escano due risultati esatti ma non vedo il controllo se il nuovo risultato è un nome già presente, quindi nel caso uscisse lo stesso nome combineresti qualche casino).
Rispondendo alla tua domanda non credo ci sia una funzione di php pronta per fare ciò

Borgo scusa ma spero che nella tua soluzione lo script non chieda all'utente di inserire un nuovo nome. Sarebbe molto fastidioso per l'utente (almeno per uno che pretende velocità e semplicità come me) :)
 
ciao
incrementando con l'id va benissimo se uno usa un db, se non si usa, il sistema di marco_rx va appastanza bene, ma non essendo sicurissimo deve avere un controllo per non sovrascivere.
non importa che l'utente reinserisca il nome, ma la funzione che lo genera si ripete sino a che non viene generato un nome inesistente.
 
Borgo, tu avevi scritto:
PHP:
 echo "il file esiste, scegli un altro nome";
Quindi credevo lo volessi chiedere all'utente. Sarebbe un suicidio per il sito...ovvio che in automatico è il modo migliore ;)
 
Ultima modifica:
ciao
l'avevo fatto per semplificare
dimenticavo: per semplificare
PHP:
<?php
function genera_nome(){
	$nome="";
	for($k=0;$k<10$k++){
		$nome.=chr(rand(97,122));
	}
	return $nome;
}
?>
 
Ultima modifica:

Discussioni simili