Foros del Web » Programando para Internet » PHP »

[Aporte] Funcion de subida de archivos

Estas en el tema de [Aporte] Funcion de subida de archivos en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 18/08/2010, 04:56
 
Fecha de Ingreso: marzo-2009
Mensajes: 42
Antigüedad: 10 años, 7 meses
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! ;)
  #2 (permalink)  
Antiguo 18/08/2010, 05:32
Avatar de MaTyS  
Fecha de Ingreso: enero-2009
Ubicación: Mar del Plata
Mensajes: 220
Antigüedad: 10 años, 10 meses
Puntos: 18
Respuesta: [Aporte] Funcion de subida de archivos

Muy buen aporte, deberias borrar la parte que dice
include ("Conexion_Base_Datos.php");
porque a muchos que estén aprendiendo se verán desorientados.
El resto esta excelente!
Saludos.
  #3 (permalink)  
Antiguo 18/08/2010, 05:34
Avatar de dedydamy  
Fecha de Ingreso: marzo-2010
Ubicación: Aca :D
Mensajes: 78
Antigüedad: 9 años, 8 meses
Puntos: 4
Respuesta: [Aporte] Funcion de subida de archivos

muy bueno, pero tiene cosas que muchos no suelen usar :D pero de lo demas, muy buena programacion,
__________________
http://dedydamy.com/
  #4 (permalink)  
Antiguo 18/08/2010, 07:03
 
Fecha de Ingreso: marzo-2009
Mensajes: 42
Antigüedad: 10 años, 7 meses
Puntos: 5
Respuesta: [Aporte] Funcion de subida de archivos

Gracias!

Era solo una aclaración para que se entendiera, lo modificaría pero no se porque no me deja xD
Quería añadir un cambio y no puedo editarlo, así que lo pongo aquí.
en subidaficheros.php en la parte de
Código PHP:
    /* Sustituir esto */
    // Si la ruta no existe, la crea
    
if (!file_exists(".".$ruta)) mkdir(".".$ruta$permisos);

    
/* Sustituirlo por esto */ 
    // Si la ruta no existe, la crea
    
if (!file_exists(".".$ruta))
         {
            
mkdir(".".$ruta$permisos);
            
chmod(".".$ruta$permisos);
         } 
La razón es simple, por alguna razón en algunos servidores el mkdir no puede asignar permisos, que es lo que me acaba de pasar ahora, y por lo tanto no deja subir archivos.

Etiquetas: ficheros, subida, programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:47.