Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/08/2010, 03:56
Alcalina
 
Fecha de Ingreso: marzo-2009
Mensajes: 42
Antigüedad: 15 años, 1 mes
Puntos: 5
[Aporte] Funcion de subida de archivos

Buenas!

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($ficherostrpos($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
?>
pagina.php
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/"$modo1"Aleatorio""Texto"450000000755);

 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>
Espero que os sirva! ;)