Autor Tema: [CLASS] File Upload  (Leído 1088 veces)

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
[CLASS] File Upload
« en: 20 de Mayo de 2010, 23:02:52 pm »
Estaba aburrido y hize una clase para subir archivos, cualquier duda & pregunta sólo digan.
Citar
<?PHP
/*
8888888888    .d88888b.      .d8888b.     888     888    Y88b   d88P 
888          d88P" "Y88b    d88P  Y88b    888     888     Y88b d88P  
888          888     888    888    888    888     888      Y88o88P   
8888888   888     888    888           888     888       Y888P    
888          888     888    888           888     888       d888b    
888          888     888    888    888    888     888      d88888b   
888          Y88b. .d88P    Y88b  d88P    Y88b. .d88P     d88P Y88b  
888           "Y88888P"      "Y8888P"      "Y88888P"    d88P   Y88b 
                                                         

	
Autor: Focux
	
Titulo: File Upload
	
Version: 0.1

Modo de uso:
$subir = new fileUpload(directorio(dejalo vacio si es en el directorio donde esta el script),tamaño maximo(dejalo vacio y cojera por defecto 1000),array con extensiones permitidas);
$subir->checkFiles() //Esta funcion sube el archivo
$subir->showError(); //Esta funcion muestra el error

Ejemplo:
<?php
if(isset($_POST[&#39;ok&#39;])){
require_once(&#39;upload.php&#39;);
$subir = new fileUpload(&#39;algo/&#39;,&#39;1000&#39;,Array("rar","txt"));
$subir->checkFiles();
$subir->showError();
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="subir"/>
<input type="submit" name="ok"/>
</form>

Otros:
Hize todas las variables publicas por si quieren mostrar en algún lugar el tamaño máximo y otras cosas etc.
*/
class fileUpload {
    public 
$folder//Creamos las variables
    
public $maxSize;
    public 
$allowedFiles;
    private 
$error;
    public function 
__construct($folder = &#39;&#39;, $maxSize = "1000", $allowedFiles) { //Agregamos el constructor, en caso de dejar los campos vacío tomara los valores por defecto que se encuentra arriba.
        
$this->folder $folder//Le damos el valor a cada variable
        
$this->maxSize $maxSize;
        
$this->allowedFiles $allowedFiles;
    }
    public function 
checkFiles() {
        foreach(
$_FILES as $some => $result) { //Con este foreach obtenemos el nombre del campo $_FILES
            
foreach($_FILES[$some] as $name => $valor) { //Con este foreach extraemos los datos de la superglobal $_FILES
                
eval(&#39;$this->&#39; . $name . &#39;= \&#39;&#39; . $valor . &#39;\&#39;;&#39;); //Los datos obtenidos los guardamos en variables
            
}
        }
        if (
$this->size $this->maxSize) { //Verificamos si el peso del archivo supera lo maximo establecido, si lo supera pasamos el error.
            
$this->error 1;
            return 
false;
        } else {
            if (!
in_array(end(explode(&#39;.&#39;, $this->name)), $this->allowedFiles)) { //Verificamos si la extensión permitida se encuentra en las establecidas.
                
$this->error 2;
                return 
false;
            } else {
                if (@
file_exists($this->folder sha1_file($this->tmp_name) . time() . $this->name)) { //Verificamos si el archivo existe.
                    
$this->error 3;
                    return 
false;
                } else {
                    if (!@
copy($this->tmp_name$this->folder sha1_file($this->tmp_name) . time() . $this->name)) { //Copiamos el archivo al servidor.
                        
$this->error 3;
                        return 
false;
                    } else {
                        
$this->error 4;
                        return 
true;
                    }
                }
            }
        }
    }
    public function 
showError() { //Esta función muestra el error.
        
switch ($this->error) { //Con el switch mostramos el error mediante los datos obtenidos anteriormente
            
case 1:
                echo &
#39;Tu archivo supera los limites permitidos (&#39; . $this->maxSize . &#39;)&#39;;
            
break;
            case 
2:
                echo 
"La extensión de tu archivo no es permitida";
            break;
            case 
3:
                echo 
"Hubo un error al subir el archivo, intentelo de nuevo";
            break;
            case 
4:
                echo 
"Archivo subido con exito";
        }
    }
}
?>

Link de prueba: http://focux.zobyhost.com/uplo.php
« Última modificación: 28 de Junio de 2010, 01:24:49 am por Focux »
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Comunidad PHPeros

[CLASS] File Upload
« en: 20 de Mayo de 2010, 23:02:52 pm »

Desconectado hansphp

  • PHPerit@
  • *
  • Mensajes: 7
  • Karma: 2
  • Sexo: Masculino
  • Nuev@ PHPer@
    • Ver Perfil
Re:[CLASS] File Upload
« Respuesta #1 en: 30 de Junio de 2010, 02:36:05 am »
esta linea es muy peligrosa
Código: [Seleccionar]
eval('$this->' . $name . '= \'' . $valor . '\';'); //Los datos obtenidos los guardamos en variables;Estube analizando el codigo y pude realizar una ejecución remota e incluso se puede cambiar que extension permite el script.

sustituyelo por :

 $this->$name= $valor; //Los datos obtenidos los guardamos en variables

un clásico puntero
« Última modificación: 30 de Junio de 2010, 03:00:19 am por hansphp »