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