Hoy voy a traeros un pequeño script en php, capaz de solucionar montones de problemas con la subida de archivos. Es de creación propia y que he ido perfeccionando, pero que funciona muy bien xD
/*************************************************************************************** * Script creado por Alcalina 18/08/2010 * *************************************************************************************** * Esta función permite subir archivos con una configuración mínima y de muy fácil uso * *************************************************************************************** * Ejemplo de uso en una página PHP: * * include ("Conexion_Base_Datos.php"); * include ("subidaficheros.php"); * * if (isset($_FILES['adjunto']['name']) && strlen($_FILES['adjunto']['name'])>0) { * $modo = $_REQUEST['modo']; * // Los campos son: (Nombre Archivo Subido, Nombre Temporal Archivo Subido, Campo de la base de datos, Ruta en un directorio superior, Modo de recogida de datos, * // Crear subdirectorios, Nombre de archivo aleatorio, Formatos de archivo permitido, tamaño en Bytes permitidos, permisos a la carpeta si se crea) * $archivo = subir ($_FILES['adjunto']['name'], $_FILES['adjunto']['tmp_name'], "Campo_de_la_Base_de_Datos", "./archivos/", $modo, 1, "Aleatorio", "Texto", 45000000, 0755); * * if ($modo == "Alta") mysql_query("INSERT INTO tabla (Campo_de_la_Base_de_Datos) VALUES (".$archivo.")",$conexion); * elseif ($modo == "Modificacion") mysql_query("UPDATE tabla SET ".$archivo." WHERE (CONDICION)",$conexion); * } /*****************************************************/ function subir ($fichero, $fichero_temp, $campoBD, $ruta, $modo, $subdirectorio = 0, $nombre = 0, $permitido = "Todos", $tamaño = 20971520, $permisos = 0777) { // Si existe el fichero y posee información... if (isset($fichero) && strlen($fichero)>0) { // Generamos una variable llamada tiempo $tiempo = mktime(); // Guardamos la extension del fichero subido $ext = strtolower(substr($fichero, strpos($fichero,'.'), strlen($fichero)-1)); // Si nombre es igual a aleatorio genera un nombre de archivo y le añadimos la extension if ($nombre == "Aleatorio") $archivo = "A".$tiempo.$ext; // Si no, generamos un prefijo para el archivo y despues le añadimos el nombre que poseia (Ya posee su extension) else $archivo = "N".$tiempo.$fichero; // Por si deseamos separar los directorios por extension de archivo... if ($subdirectorio == 1) { $extension = substr($ext,1,strlen($ext)-1); $ruta = $ruta.$extension."/"; } // Extensiones permitidas según variable // En caso de necesitar más extensiones se pueden ir añadiendo, // e incluso creando nuevos cases switch ($permitido) { case "Texto": // En caso de ser Texto, estos son los formatos de texto permitidos $extensiones_permitidas = array('.doc','.docx','.pdf','.txt','.rtf'); // Formato de Texto Permitido if(!in_array($ext,$extensiones_permitidas)) die("El formato de archivo ".$AUX." no esta permitido"); break; case "Imagen": // En caso de ser Imagenes, estos son los formatos de imagen permitidos $extensiones_permitidas = array('.jpg','.jpeg','.bmp','.png','.gif','.tif','.tga'); // Formato de Imagen Permitido if(!in_array($ext,$extensiones_permitidas)) die("El formato de archivo ".$AUX." no esta permitido"); break; default: // En caso de default o Todos.. No se valida la extension. break; } // Comprueba que el tamaño de archivo subido no sea mayor al permitido if(filesize($fichero_temp) > $tamaño) die("El archivo que intentas subir supera los ".($tamaño/(pow(1024,2)))." Megas"); // Si la ruta no existe, la crea if (!file_exists(".".$ruta)) mkdir(".".$ruta, $permisos); // Comprueba si tienes los permisos en la ruta asignada. if(!is_writable(".".$ruta)) die('No puedes subir el archivo al directorio especificado. Directorio: .'.$ruta); // Mueve el archivo if (move_uploaded_file($fichero_temp, ".".$ruta.$archivo)) { if ($modo=="Alta") return $ruta.$archivo; else return ", ".$campoBD." = \"".$ruta.$archivo."\""; } else { die ("Ocurrió algún error al subir el archivo."); return false; } } // Fin de si el fichero no existe } // END FUNCION
No hay comentarios:
Publicar un comentario
Escribe tu comentario