Volviendo al tema, intenta hacer algunas comprobaciones adicionales
Hay muchas funciones para hacer la subida por ejemplo:    
Código PHP:
Ver original- <?php 
- function upload_img($file,$nombre="img",$ruta="",$max_size= "5000000",$max_archivos=5){ 
-     $tipos_de_archivos= array("image/jpeg","image/jpg","image/png"); 
-   
-     if ($ruta=="") { $ruta = $_SERVER['DOCUMENT_ROOT']."/img/"; } 
-         if( !mkdir($ruta, 0775, true) ){ return 'No se a podido crear el directorio'; } 
-     } 
-   
-     $numero_de_archivos= count($file[$key_files[0]]['name']); 
-     if ($numero_de_archivos<1) {return 'No se ha cargado ningun archivo.';} 
-     if ($numero_de_archivos>$max_archivos) {return 'Solo se pueden subir <b>'.$max_archivos.' archivos</b> a la vez.';} 
-     if ( !is_array($file[$key_files[0]]['tmp_name']) ){return 'Se deben subir los archivos como un array.';} 
-   
-     $tmp_name= $file[$key_files[0]]['tmp_name']; 
-     $type= $file[$key_files[0]]['type']; 
-     $size= $file[$key_files[0]]['size']; 
-     $name= $file[$key_files[0]]['name']; 
-     $error= $file[$key_files[0]]['error']; 
-   
-     foreach ($tmp_name as $k => $v) { 
-         if (!is_uploaded_file($v)) {return '<br/>El archivo <b>'.$name[$k].'</b> ha dado error.';} 
-     } 
-     foreach ($error as $k => $v) { 
-         if ($v!==0) {return '<br/>El archivo <b>'.$name[$k].'</b> ha dado error.<br>'. $v;} 
-     } 
-     foreach ($type as $k => $v) { 
-         if (!in_array($v, $tipos_de_archivos)){return '<br/>El archivo <b>'.$name[$k].'</b> no esta permitido. Solo archivos JPG, JPEG, PNG.';} 
-     } 
-     foreach ($size as $k => $v) { 
-         if ($v>$max_size) {return '<br/>El archivo <b>'.$name[$k].'</b> supera el tamaño permitido.';} 
-     } 
-     foreach ($name as $k => $v) { 
-         $nombre_final[$k]=$nombre.'-'.date('dmYHis').'-'.$k.'.'.$extension;  
-     } 
-      
-     foreach ($tmp_name as $k => $v) { 
-         $destino= $ruta.$nombre_final[$k]; 
-         if(!move_uploaded_file($v, $destino)){return '<br/>No se ha podido mover el archivo al servidor.';} 
-         $n[]=$nombre_final[$k]; 
-     } 
- return $n; 
- } 
-   
- $subido=upload_img($_FILES,"nombre_img_sin_extension","ruta_completa"); 
Solo tienes que pasarle $_FILES el resto de parámetros son opcionales y devuelve un array con los nombres de los archivos subidos si todo hay ido bien. 
También ten en cuenta que hay limitaciones a la hora de subir archivos establecidas en php mediante algunas directivas, revisa esto para más información: 
dificultades comunes