Estás mezclando comillas, no es necesario que incluyas siempre las comillas dobles. Si la variable es una cadena, basta con escribir su nombre...
De la forma que lo escribí yo, funciona.
$_SERVER['DOCUMENT_ROOT'].'/Upload/'.$nombre_archivo
Si querés usar las comillas dobles y que la variable se expanda dentro de las comillas, la forma sería:
"$_SERVER[DOCUMENT_ROOT]/Upload/$nombre_archivo"
¿notás la falta de las comillas alrededor de DOCUMENT_ROOT?
Ambas formas son válidas, pero tengo entendido que la forma con las comillas simples (la que puse primero) se procesa más rápido.
Creo que hace falta aclarar que si una función necesita una cadena como parámetro, y la cadena la guardamos como:
$variable = 'Hola, mundo';
no es necesario hacer
funcion("$variable");
sino que basta con
funcion($variable);
Capaz que ya lo sabías, pero por las dudas
Y vevni, es cierto, es mejor confiar en los tipos mime.
Pero no es el servidor el que da la información, sino que ese dato se obtiene de lo que envía el navegador... por lo que tampoco es tan 'confiable'....
Lo ideal sería usar una función (o comando del sistema) capaz de analizar el archivo y devolver su tipo.
En fin, saludos