Генерация случайного имени файла при загрузке на сервере

Для того чтобы сохранить кудато в папку на сервере файл выбранный пользователем, необходимо указать его имя. Чтобы имена точно не повторялись, можно поступить например так:

$answer["error"]=true;
$answer["errortext"]="Ошибка сохранения фото (ошибка доступа)";

$uploaddir = WUO_ROOT.'/uploads'; 
if( ! is_dir( $uploaddir ) ) mkdir( $uploaddir, 0777 );
$uploaddir = WUO_ROOT.'/uploads/'.Date("Y"); 
if( ! is_dir( $uploaddir ) ) mkdir( $uploaddir, 0777 );
$uploaddir = WUO_ROOT.'/uploads/'.Date("Y")."/".Date("md"); 
if( ! is_dir( $uploaddir ) ) mkdir( $uploaddir, 0777 );

$files      = $_FILES; // полученные файлы
foreach( $files as $file ){
		$file_name = $file['name'];
                $file_name = md5(microtime() . rand(0, 9999)).uniqid().".".getExtension1($file_name);
		if( move_uploaded_file( $file['tmp_name'], "$uploaddir/$file_name" ) ){
                    $done_files = realpath( "$uploaddir/$file_name" );
                    $answer["error"]=false;
                    $answer["errortext"]="";
                    $answer["result"]=$done_files;
		}
}

echo json_encode($answer);

function getExtension1($filename) {
    return end(explode(".", $filename));
};

Одно Но! тут нет контроля, что пользватель выбрал файл без расширения. Хотя с другой стороны, я например это ограничиваю на уровне выбора файла. Например так:

<input id="fileinput" type="file" accept="image/*" capture="capture" >