Pues sí, porque eso hace que las variables de entrada se conviertan en variables locales, es por eso que $foto te da el path temporal, también tienes un error aqui:
Código PHP:
Ver originalif($tipo=="image/jpeg"){
$foto=$new_id.".jpg";
}
elseif($tipo=="image/gif"){
$foto=$new_id.".gif";
}
Si te fijas no estas comparando por image/jpeg y por eso $foto se queda con el valor temporal.
Te recomiendo trabajes con register_globals en Off ya que es un riesgo de seguridad.
Saludos.