¿Por que no funciona la funcion move_uploaded_file() de PHP?

Tengo un problema, llevo bastante rato tratando de hacer un formulario en donde un usuario suba una imagen al servidor, creo que el problema esta en la dirección de destino, pero he tratado de cambiar esa direccion muchas veces y sigue sin funcionar,

HTML

 <form class="row" action="php/cambiarFoto.php" method="post" enctype="multipart/form-data">     <input type="file" name="imagen">     <button type="submit" name="enviar">Guardar</button> </form>  

PHP

 foreach ($  _FILES['imagen'] as $  x => $  y) { echo "$  x: $  y <br>"; } echo "<hr>"; $  nombre = $  _FILES['imagen']['name']; $  tipo = $  _FILES['imagen']['type']; $  tamagno = $  _FILES['imagen']['size']; $  error = $  _FILES['imagen']['error']; $  rutaTemporal = $  _FILES['imagen']['tmp_name'];   if ($  tipo == "image/jpg" or $  tipo == "image/png" or $  tipo == "image/gif" or $  tipo == "image/jpeg"){     if ($  tamagno <= 500000) {         if ($  error == 0){             move_uploaded_file($  rutaTemporal,"../../img/perfil/" . $  nombre);         } else {             header("Location: ../?error");             die();         }      } else {         header("Location:../?err_tamagno_imagen");         die();     }  }else{     header("Location:../?err_tipo_imagen");     die(); }