Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/03/2009, 15:10
andresenrique
 
Fecha de Ingreso: marzo-2009
Mensajes: 3
Antigüedad: 15 años, 2 meses
Puntos: 0
Abstracción de clase

Buenas tardes, mi problema es el siguiente, estoy intentando crear una clase sobre una ya existente, por la cuestión de modularidad, es decir, si en X o Y momento quiero migrar a otra clase para subir archivos, solo modificaria mi clase existente sin necesidad de ir a cada módulo donde cargue archivos y modificarlos, al igual como se hace con las abstracciones de base de datos.

Estoy usando PEAR::HTTP_Upload para cargar los archivos.

Mi clase:

Código PHP:
<?php

class Subir
{   
    function 
__construct()
    {
        
// Instanciamos la claseHTTP_Upload
        
$this->subir = new HTTP_Upload('es'); 
    }
    
    private 
$archivo;
    
    function 
cargaArchivo($archivo)
    {
        
// Cargamos el archivo a subir
        
$this->file $this->subir->getFiles($archivo);
        
print_r($this->file);
        
    }
    
    private 
$propiedad;
    
    function 
getProp($propiedad)
    {
        
// Cargamos para mostrar la propiedad que queremos
        
$this->file->getProp($propiedad);
    }
    
    private 
$carpeta;
    
    function 
moverA($carpeta)
    {
        
// Movemos archivo a la carpeta indicada
        
$this->movido $this->file->moveTo($carpeta);
    }
    
    function 
getMensaje()
    {
        
// Obtenemos mensaje
        
$this->movido->getMessage();
    }
    
    function 
esValido()
    {
        
// Verificamos si el archivo es válido
        
$this->file->isValid();
    }
    
    
    function 
sinArchivo()
    {
        
// Verificamos si no se subió un archivo
        
$this->file->isMissing();
    }
    
    function 
hayError()
    {
        
// Verificamos si hubo algún error
        
$this->file->isError();
    }
    
    function 
msjError()
    {
        
// Mostramos el mensaje de errror
        
$this->file->errorMsg();    
    }
    
    private 
$var;
    
    function 
errorPEAR($var)
    {
        
// Verificamos si hubo algun error con PEAR::IsError
        
PEAR::isError($var);
    }
}
?>
Aquí en donde uso mi clase:

Código PHP:
<?
//previamente el la clase cargada con autoload
$upload         = new Subir();
 
/// Cargamos archivo proveniente del formulario
    
$upload->cargaArchivo('xml');
    
// Verificamos si el archivo es valido
    
if ($upload->file->esValido())
    {
        
// Movemos el archivo a la carpeta asignada
        
$movido $upload->MoverA(DIR_UPLOAD);
        
// Verificamos si hubo un error
        
if (errorPEAR($movido))
        {
            echo 
'Correctamente subido a: ' .$upload->getProp('ext');
        }
        else
        {
            
// Mostramos mensaje de error
            
$upload->getMensaje();    
        }
    }
    
// Verificamos si se subió un archivo
    
elseif ($upload->sinArchivo())
    {
        echo 
'Debes subir un archivo';
    }
    
// Verificamos si se pudo mover el archivo
    
elseif ($upload->moverA)
    {
        
// Mostramos mensaje de error
        
echo $upload->msjError();
    }
Le he hecho var_dump para ver donde está el problema y no lo encuentro para nada, la clase está instanciada, pero ni idea de porque no funciona.

Lo probé a 'patica' sin usar la clase que yo he hecho, usando directamente la clase PEAR::HTTP_Upload y funciona -perfectamente-.

Código PHP:
<?php
require_once "HTTP/Upload.php";

$upload = new HTTP_Upload("en");
$file $upload->getFiles("f");

if (
$file->isValid()) {
    
$moved $file->moveTo('uploads/');
    if (!
PEAR::isError($moved)) {
        echo 
'File was moved to uploads/' $file->getProp('name');
    } else {
        echo 
$moved->getMessage();
    }
} elseif (
$file->isMissing()) {
    echo 
"No file was provided.";
} elseif (
$file->isError()) {
    echo 
$file->errorMsg();
}
?>

Saludos

Última edición por andresenrique; 20/03/2009 a las 15:21