Buenos, pues les dejo este upload hecho por mi que tiene las siguientes caracteristicas

1. No lo sube si la extencion no esta en el array
2. Si el archivo tiene espacios los cambio por “_”
3. Si sobrepasa el tamaño lo dice y no deja
4. Si el directorio a subir no existe lo crea (esto hace que el upload sirva con solo editar url)
5. crea prefijos para que no se repitan los archivos
6. Seguridad 100% garantizada ya que lee la extencion que esta hasta el ultimo
7. Comentarios para que lo entiendas
8. Seguridad anti bots

Espero los sirve, dejo el codigo

Prueba en vivo: http://dedydamyw.tk/upload2/

<?
if(!is_dir("registros/")){
mkdir("registros/",0777);
}
$cad2 = substr(md5(uniqid(rand())),0,5);
$autentificar=fopen("registros/".$cad2."","a");
fclose($autentificar);

if($_GET[accion] == “subir”){

if($_POST[subir]){

if(is_file(“registros/”.$_POST[hola].”")){
unlink(“registros/”.$_POST[hola].”");
/* Damos datos de preferencia */
$prefijo = substr(md5(uniqid(rand())),0,5);//esto es un numero en md5 con 5 caracteres para que no se repitan las o archivos
$url_upload=”http://dedydamyw.tk/upload2/”;//ponemos url del upload (es necesaria la “/” al final)
$carpeta= “host/”;//carpeta que se creara (ne es necesario crearla manualmente)
$extenciones_permitidas=array(‘jpg’,'jpeg’,'png’,'bmp’);//puedes añadir las que quieras
$tamano_max=”2097152″;//tamaño maximo en bytes (predeterminado 2mb)
/* Rrgla de tres para convertir Bytes por Mbytes*/
$uno=1;
$unomb=1048576;
$mbo1= $tamano_max * $uno;
$mb=$mbo1 / $unomb;
/* Obtenemos los datos del archivo */
$archivo_nombre = $_FILES["cosa"]['name'] ;
$archivo_tamano = $_FILES["cosa"]['size'] ;
$archivo_temporal = $_FILES["cosa"]['tmp_name'] ;
$archivo_tipo = $_FILES["cosa"]['type'] ;
/* checamos si selecciona archivo */
if($archivo_nombre == “”){
echo”No has seleccionado archivo”;
exit();
}
/* checamos si el directorio existe, si no, lo crea :P */
if(!is_dir($carpeta)){
mkdir($carpeta,0777);
}
/* checamos el tamaño */
if($archivo_tamano>$tamano_max){//si es mas grande lo decimos y dejamos de ejecutar
echo”Archivo Muy pesado. Maximo “.$mb.” MB”;
exit();
}
/* obtenemos extencion */
$obtener_extencion=explode(“.”,$archivo_nombre);//separamos desde punto
$extencion_max=end($obtener_extencion);//leemos extencion (gracias spider_boy no sabia de esa funcion)
$extencion=strtolower($extencion_max);//convertimos a minusculas
/* checamos extencion */
if(in_array($extencion,$extenciones_permitidas)){//si es permitida lo subimos y lo decimos
$nombre_chido=$obtener_extencion[0];
$nombre_chido=str_replace(” “,”_”,$nombre_chido);
$completa= “”.$carpeta.”/”.$prefijo.”_”.$nombre_chido.”.”.$extencion.”";//creamos ruta completa
/* subir archivo */
move_uploaded_file($archivo_temporal,$completa);
echo”<strong>Url</strong>: “;
echo “”.$url_upload.”".$completa.”";
echo”
“;
echo”<strong>Tamaño</strong>: “;
echo “”.$archivo_tamano.” bytes”;
echo”
“;
echo”<strong>Tipo</strong>: “;
echo “”.$archivo_tipo.”";
echo”

“;
echo”<a href=”.$url_upload.”>Regresar</a>”;
exit();
}else{//si no permitimos la extencion lo decimos
echo”Extencion no permitida”;
exit();
}
}else{
echo”<h2>Error de autentificacion</h2>

“;
echo”<a href=”.$url_upload.”>Regresar</a>”;
exit();
}
exit();
}

exit();
}
?>
<form action=”<? echo $_SERVER['PHP_SELF'] ?>?accion=subir” method=”post” enctype=”multipart/form-data”>
<input name=”cosa” type=”file” />
<input type=”hidden” name=”hola” value=”<? echo $cad2 ?>”>
<input name=”subir” type=”submit” value=”Subir” />
</form>