Me gustaría compartir una pequeña función con todos, ya que me he cansado de tener que escribir la misma estructura de subida de archivos para paginas web, he creado una pequeña funcioncilla para subir el archivo y que te devuelva el código necesario para introducirlo en una base de datos
subidaficheros.php
Código PHP:
<?php
/*******************************************
* 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 *
*******************************************/
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
?>
Código PHP:
<?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);
}
?>
<html>
<head>
<title>Prueba de subida de archivos</title>
</head>
<body>
<form name='test' method='post' enctype='multipart/form-data' action='pagina.php'>
<input type='file' name='adjunto'>
<input type='hidden' name='modo' value='Alta'>
</form>
</body>
</html>