Yo tengo esto, es bastante sencillo, y se puede adaptar para sessiones o usuarios sin session:
Código PHP:
if(is_uploaded_file($_FILES['f_pm_upload']['tmp_name'])) {
/** Cambiamos el nombre del archivo **/
$new_filename = $_SESSION['user']."-".$_FILES['f_pm_upload']['name'];
$_FILES['f_pm_upload']['name'] = $new_filename;
/* Done*/
Si lo que queres es, como dice Celcius, algo que no tiene relación con sessiones de usuario, podes aplicar el random como explica Damian. O una fecha... lo que más sea util... mismo un "unix time" con la funcion time(), ahi si que no vas a tener jamas un archivo repetido :)
Código PHP:
if(is_uploaded_file($_FILES['f_pm_upload']['tmp_name'])) {
/** Cambiamos el nombre del archivo **/
// $id = time(); // Este solo si querés algo muy riguroso.
$id = rand(10, 9000);
$new_filename = $id."-".$_FILES['f_pm_upload']['name'];
$_FILES['f_pm_upload']['name'] = $new_filename;
/* Done*/
Weno eso es todo... lo que no incluye esta funcion es el desarmar el nombre de archivo en file.extension, pero si te sirva, tal vez sea hasta más rapido.
Saludos