Tengo un fragmento de código de hace tiempo, cuando hice una especie de rejunte para un inventito.
Código PHP:
/*Los parámetros que esta función recibe son:
nombre_archivo --> $HTTP_POST_FILES['archivo']['name']
tamanio_archivo --> $HTTP_POST_FILES['archivo']['size']
destino --> Ruta destino. EJ: "imagenes/"
nuevonombre --> Nuevo nombre que adoptará. La función se encarga de mantener la extensión
temp --> $HTTP_POST_FILES['archivo']['tmp_name'] */
function upload($nombre_archivo, $tamanio_archivo, $destino, $nuevonombre, $temp)
{
//$extension = strrchr($nombre_archivo,'.');
$extension = substr($nombre_archivo, strpos($nombre_archivo,'.'), strlen($nombre_archivo));
//Se busca la posición del punto para saber hasta dónde va el viejo nombre
$posicionpunto = strpos($nombre_archivo, ".");
//Obtengo nombre viejo para poder buscarlo en el nombre original
$nombreviejo = substr($nombre_archivo, 0, $posicionpunto);
//Sustituyo nombre viejo por nombre nuevo
$nombrefinal = substr_replace($nombre_archivo, $nuevonombre, 0, strlen($nombreviejo));
//Coloco el nombre final luego del directorio de destino
$destino = $destino.$nombrefinal;
//Busca si la extensión está dentro de las aceptadas
if (!((stripos($extension, "jpg") || stripos($extension, "jpeg") || stripos($extension, "gif") || stripos($extension, "png") || stripos($extension, "txt") || stripos($extension, "doc") || stripos($extension, "xls") || stripos($extension, "ppt") || stripos($extension, "pps")) && ($tamano_archivo < 1000000))) {
return false;
}else
{
if (move_uploaded_file($temp, $destino)){
return true;
}else
{
return false;
}
}
}
Espero que sirva de algo.
Otra cosita, fijate que las extensiones sean las indicadas, por las dudas intentá verle las extensiones a los archivos entrando a las opciones de carpeta si usás windows, es más que nada para descartar esa posibilidad.