Foros del Web » Programando para Internet » PHP »

Clase para Uploads

Estas en el tema de Clase para Uploads en el foro de PHP en Foros del Web. Hola que tal, como están. Pues yo nada más quería compartir una clase que diseñé mientras trabajaba en un proyecto. Esta clase permite definirle tamaño ...
  #1 (permalink)  
Antiguo 02/02/2005, 23:35
 
Fecha de Ingreso: octubre-2003
Ubicación: Veracruz, México
Mensajes: 169
Antigüedad: 20 años, 6 meses
Puntos: 0
Clase para Uploads

Hola que tal, como están.
Pues yo nada más quería compartir una clase que diseñé mientras trabajaba en un proyecto.
Esta clase permite definirle tamaño máximo de upload, el tipo de archivo que sepuede subir (En mi caso utilice una tabla que viene incluida en el mismo script ya que en mi proyecto trabajaba con imagénes, DOC-RTF, XLS,PPT,PUB y ZIP.)
Me gustaría que la checaran para ver si se puede optimizar y mejorar y ojalá que pueda serle de utilidad a uno que otro, la mayoria de las líneas están comentareadas para mejor uso..

Este es el código de la clase cUploadFile.php:
Código PHP:
<?php
class Upload_File{
    var 
$file_extensions//Extensiones permitidas 
    
var $type_uploads=0;//Tipo dearchivos que se subirán al server. PARA MAYOR INFORMACIÓN CONSULTAR LA TABLA
    
var $directory="uploads"//Directorio donde colocaremos los archivos despues de ser subidos (uploaded). Por default llamada uploads
    
var $max_filesize=2097152//Máximo tamaño que se permite en el upload, por default 2M de la configuracion por default de php.ini
    
var $file_type;//Tipo de archivo
    
var $file_name;//Nombre de archivo
    
var $file_size;//Tamaño del archivo
    
var $temp_filename;//Nombre del archivo temporal
    
var $file//Nombre del archivo con todo y ruta
    
    /*
     TABLA DE VALORES DE TIPOS DE ARCHIVOS
     0 = INDISTINTO TXT: text/plain 
     1 = IMAGENES (JPEG/PNG/GIF)
     2 = DOCUMENTOS DE WORD (DOC, RTF)   application/msword
     3 = HOJAS DE CALCULO DE EXCEL (XLS) application/vnd.ms-excel 
     4 = PRESENTACIONES DE POWER POINT (PPT) application/vnd.ms-powerpoint 
     5 = PUBLICACIONES DE PUBLISHER application/vnd.ms-publisher 
     6 = ZIP FILES application/x-zip-compressed 
     7 = TODOS LOS ANTERIORES
    */
    
    
function Upload_File($tipo_upload=0,$path="",$max_file=""){
        
        if (!(empty(
$max_file))){ 
            
$this->max_filesize=$max_file;
        }    
        if (!(empty(
$path))){
            
$this->directory=$path;
        }
        
//Si no existe el directorio lo creamos:
        
if ( (!(file_exists($this->directory))) || (!(is_dir($this->directory))) ){
                
mkdir($this->directory);
        }    

        switch (
$tipo_upload){ //Determinar los tipos de archivos permitidos dependiendo de la TABLA TIPOS DE ARCHIVO
            
case 0:
                   break;
            case 
1://se subirán imágenes
                   
$this->file_extensions=array ("image/pjpeg","image/x-png","image/jpeg","image/png","image/gif");
                   break;
            case 
2://se subirán documentos
                   
$this->file_extensions="application/msword";
                   break;       
            case 
3://se subirán hojas de cálculo
                   
$this->file_extensions="application/vnd.ms-excel";
                   break;    
            case 
4://se subirán presentaciones
                   
$this->file_extensions="application/vnd.ms-powerpoint";
                   break;        
            case 
5://se subirán publicaciones
                   
$this->file_extensions="application/vnd.ms-publisher";
                   break;                        
            case 
6://se subirán archivos enzipados
                   
$this->file_extensions="application/x-zip-compressed";
                   break;        
            case 
7://se subirán los anteriores formatos
                   
$this->file_extensions=array ("image/pjpeg","image/x-png","image/jpeg","image/png","image/gif","application/msword","application/vnd.ms-excel","application/vnd.ms-powerpoint","application/vnd.ms-publisher","application/x-zip-compressed");
                   break;          
        }
        
$this->type_uploads=$tipo_upload;
    }
    
    function 
PutFileUploaded($file){
        
$validated=FALSE;
        
//Validar si el archivo existe en la matriz $_FILES
        
if (!(isset($_FILES[$file]))){
            
$this->onError(1);
        }    
        
//Guardar como atributo del objeto nombre del archivo, tamaño y nombre del temporal
        
$this->file_type $_FILES[$file]['type'];  
        
$this->file_name $_FILES[$file]['name'];  
        
$this->file_size $_FILES[$file]['size']; 
        
$this->temp_filename $_FILES[$file]['tmp_name'];
        
        
//Validar el tamaño del archivo
        
if ( ($this->file_size <= 0) || ($this->file_size $this->max_filesize) ){
             
$this->onError(2);
        }    
        
        
//Validar de acuerdo al tipo permitido de archivos correspone al que se pretende subir
        
switch ($this->type_uploads){ //Determinar los tipos de archivos permitidos dependiendo de la TABLA TIPOS DE ARCHIVO
            
case 0:
                   
$validated=true//No hay regla de validación por lo tantoo automáticamente es válido
                   
break;
            case 
1://se busca que el tipo de archivo concuerde con el tipo 1 (IMAGENES)
                  
foreach ($this->file_extensions as $extension){
                       if (
$extension == $this->file_type){
                        
$validated=true;
                        break;
                    }
                   }
                   break;   
            case 
2://se busca que el tipo de archivo concuerde con el tipo 2 (DOCUMENTOS)
                   
if ($this->file_type==$this->file_extensions){
                        
$validated=true;
                        break;
                   }
                   break;
            case 
3://se busca que el tipo de archivo concuerde con el tipo 3 (HOJAS DE CÁLCULO)
                   
if ($this->file_type==$this->file_extensions){
                        
$validated=true;
                        break;
                   }
                   break;
            case 
4://se busca que el tipo de archivo concuerde con el tipo 4 (PRESENTACIONES)
                   
if ($this->file_type==$this->file_extensions){
                        
$validated=true;
                        break;
                   }
                   break;
            case 
5://se busca que el tipo de archivo concuerde con el tipo 5 (PUBLICACIONES)
                   
if ($this->file_type==$this->file_extensions){
                        
$validated=true;
                        break;
                   }
                   break;
            case 
6://se busca que el tipo de archivo concuerde con el tipo 7 (ZIPS FILES)
                   
if ($this->file_type==$this->file_extensions){
                        
$validated=true;
                        break;
                   }
                   break;
            case 
7://se busca que el tipo de archivo concuerde con el tipo 8 (TODOS LOS ANTERIORES)
                   
foreach ($this->file_extensions as $extension){
                       if (
$extension == $this->file_type){
                        
$validated=true;
                        break;
                    }
                   }
                   break;          
        }    
        if (
$validated){// Si paso la prueba de validación
            
$filename basename ($this->file_name); //Obtener el nombre del archivo
              
$this->file $this->directory "/"$filename//Formar la cadena del Archivo con todo y ruta
            
$this->file=str_replace(" ","_",$this->file);//Reemplazamos los espacios en blanco por guiones bajos.
            //Si ya hay un archivo con ese nombre lo renombramos
            
if (file_exists($this->file)){
                list(
$path_and_file,$extension) = explode(".",$this->file); //Separamos el nombre del archivo archivo en partes
                
$unique=false;
                
$iteration=1;
                while (!(
$unique)){ //Realizaremos el ciclo hasta encontrar un nuevo nombre de archivo mas un consecutivo
                   
$provisional_filename=$path_and_file "_" $iteration "."$extension;
                   if (!(
file_exists($provisional_filename))){//Si en esa iteración el nombre de archivo provisonal dado no existe,asignarlo a como nombre definitvo de archivo
                           
$this->file=$provisional_filename;
                           
$unique=true;
                   }
//Si no seguimos iterando hadta encontrar el nombre unico
                   
$iteration++;
                }
            }
            
            if(
is_uploaded_file($this->temp_filename)){ //Si el archivo es un upload entonces se procede a moverlo
                
if (@move_uploaded_file($this->temp_filename,$this->file)){ //Si se movió correctamente regresar el  nombre del archivo
                    
return $this->file;
                }
                else{
                    
$this->onError(5);
                }    
            }
            else{
                
$this->onError(4);
            }    
            
         }
         else{
             
$this->onError(3);
         }
        
    }
     
     function 
onError($errorcode){
         switch (
$errorcode){
            case 
1://No existe el archivo en $_FILES[]
                    
exit("<i>No se ha subido un archivo con el identificador dado para la funcion PutFileUploaded. x(</i>");
            case 
2://El tamaño del archivo es muy grande o no contiene nada
                    
exit("<i>No se ha podido subir el archivo porque excede del tamaño permitido. x(</i>");        
            case 
3//El tipo de archivo no es váliddo. No tiene permiso opara subir ese tipo de archivos
                    
exit("<i>No se ha podido subir el archivo porque el tipo no está autorizado. x(</i>");        
            case 
4//El archivo dado no fue subido al server a través de un upload de HTTP
                    
exit("<i>Operación no válida porque el archivo dado no fue subido vía HTTP. x(</i>");        
            case 
5:    //El archivo no pudo ser movido al directorio deseado
                    
exit("<i>Operación no válida porque no se ha podido guardar el archivo. x(</i>");                
        }
     }
    
}
?>
Y aqui va el script que muestra un ejemplo. Yo lo llame example_uf.php:
Código PHP:
<?php
include ("cUploadFile.php");//incluimos la clase
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<!--
Trazamos un formulario y un objeto FILE de HTML.
-->
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post" enctype="multipart/form-data" name="form1">
  <table width="200" border="1">
    <tr>
      <td><input type="file" name="file"></td>
    </tr>
    <tr>
      <td><input type="submit" name="Submit" value="Enviar"></td>
    </tr>
  </table>
</form>
<?php
if (isset($_FILES["file"])){
    
$my_upload = new Upload_File(2,"docs");//se subirán archivos de Word con extension DOC y RTF en la carpeta DOCS
    
$newfile=$my_upload->PutFileUploaded("file");
    echo 
'El archivo se subio correctamente, presione <a href="'$newfile .'">aqui</a> para descargarlo';//Un link para mostrar que el archivo
}    
?>
<p>&nbsp;</p>
</body>
</html>
Espero comentarios y sugerencias, proximamente podrán consultarlo en mi página personal o en phpclasses.com
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.
Tema Cerrado




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