miércoles, 18 de enero de 2012

Subir archivos en PHP

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

------ ------------