Ir para o conteúdo

Gremio10

Cadastrado: 18 Out 2010
Offline Última atividade: Set 30 2015 10:42
*****

Revisões que fiz

No códigoUpload De Arquivos Avançado

14 fevereiro 2012 - 13:58

Então galera, finalmente fiz uma nova versão da classe de Upload, a única novidade foi a reformulação do código, deixando ela mais orientada, e mais limpa.

<?php

/**
 * Classe para upload multiplo ou simples de arquivos
 * 
 * @author Felipe Pieretti Umpierre 
 * umpierre[dot]felipe[at]gmail[dot]com
 * @package Upload
 */
class Upload 
{    
    private $file = array();    
    
    # Diretório para aonde será enviado os arquivos
    public $dir;
    
    # Extensões permitidas
    public $extension = array(); 
    
    # Tamanho máximo do arquivo, em MB
    public $size;
    
    # Nome(s) do(s) arquivo(s) enviado(s), já com rename
    public $name = array();
    
    /**
     * Repassa os valores da variável FILES para o file.
     * 
     * @param String $file nome do campo file
     */
    public function __construct( $file )
    {
        $this->file = $_FILES[ $file ];        
    }
    
    /**
     * Faz o upload das imagens
     * 
     * @return Array
     */
    public function upload()
    {
        $this->checkExtension()->size()->rename();
        
        # Verifica se é array, ou seja, se é multiplos arquivos a serem enviados.
        if( is_array( $this->file[ "name" ] ) && !empty( $this->file[ "name" ] ) )
        {   
            foreach( $this->file[ "error" ] as $key => $error )
            {
                # Verifica se existe algum erro no envio, se não houver, ele faz o upload
                if( $error == UPLOAD_ERR_OK || !empty( $this->file[ "name" ][ $key ] ) )
                {
                    move_uploaded_file( $this->file[ "tmp_name" ][ $key ], $this->getDir() . $this->file[ "name" ][ $key ] );
                    
                    # Armazena o nome do arquivo para a variável name, aonde depois poderá ser inserido no banco de dados
                    $this->name[] = $this->file[ "name" ][ $key ];
                }
            }
        }
        elseif( !empty( $this->file[ "name" ] ) )
        {            
            move_uploaded_file( $this->file[ "tmp_name" ], $this->getDir() . $this->file[ "name" ] );
            
            # Armazena o nome do arquivo para a variável name, aonde depois poderá ser inserido no banco de dados
            $this->name[] = $this->file[ "name" ];
        }
        
        return $this->name;
    }
    
    /**
     * Verifica se a(s) extenção(ções) do(s) arquivo(s) enviado(s)
     * é(são) permitido(s)
     * 
     * @return \Upload 
     */
    public function checkExtension()
    {
        if( is_array( $this->extension ) )
        {
            $extensions = implode( "|", $this->extension );
            
            if( is_array( $this->file[ "name" ] ) )
            {
                foreach( $this->file[ "name" ] as $key => $val )
                {
                    if( !preg_match( "/.+\.({$extensions})/", $val ) )
                    {
                        $this->file[ "name" ][ $key ] = "";
                    }
                }
            }
            else
            {
                if( !preg_match( "/.+\.({$extensions})/", $this->file[ "name" ] ) )
                {
                    unset( $this->file[ "name" ] );
                }
            }
        }
        
        return $this;
    }
    
    /**
     * Verifica se o tamanho do arquivo é do
     * limite especificado
     * 
     * @return \Upload 
     */
    public function size()
    {
        $size = $this->convertMbToBt();
        
        if( is_array( $this->file[ "size" ] ) )
        {
            foreach( $this->file[ "size" ] as $key => $sizes )
            {
                if( $sizes > $size )
                {
                    $this->file[ "name" ][ $key ] = "";
                    $this->file[ "size" ][ $key ] = "";
                }
            }
        }
        else
        {
            if( $this->file[ "size" ] > $size )
            {
                unset( $this->file[ "size" ] );
            }
        }
        
        return $this;
    }
    
    /**
     * Transaforma os MB para bits
     * 
     * @return int
     */
    private function convertMbToBt()
    {
        $size = $this->getSize() * ( 1024 * 1024 );
        return $size;
    }

    /**
     * Renomeia o(s) nome(s) do(s) arquivo(s) enviado(s)
     * @return \Upload 
     */
    protected function rename()
    {
        if( is_array( $this->file[ "name" ] ) )
        {
            foreach( $this->file[ "name" ] as $key => $val )
            {
                if( !empty( $this->file[ "name" ][ $key ] ) )
                {
                    $exts = preg_split( "[\.]", $this->file[ "name" ][ $key ] );
                    $n = count( $exts ) - 1;            
                    $exts = $exts[ $n ];

                    $this->file[ "name" ][ $key ] = date( "YmdHisu" ) . "_" . uniqid() . "_" . date( "usiHdmY" ) . "." . $exts;
                }
                else
                {
                    $this->file[ "name" ][ $key ] = "";
                }
            }
        }
        else
        {
            $exts = preg_split( "[\.]", $this->file[ "name" ] );
            $n = count( $exts ) - 1;            
            $exts = $exts[ $n ];

            $this->file[ "name" ] = date( "YmdHisu" ) . uniqid() . date( "usiHdmY" ) . "." . $exts;
        }
            
        return $this;
    }
    
    public function getDir()
    {
        return $this->dir;
    }

    public function setDir( $dir )
    {
        $this->dir = $dir;
        return $this;
    }

    public function getExtension()
    {
        return $this->extension;
    }

    public function setExtension( $extension )
    {
        $this->extension = $extension;
        return $this;
    }

    public function getSize()
    {
        return $this->size;
    }

    public function setSize( $size ) 
    {
        $this->size = $size;
        return $this;
    }
    
}

?>

Forma de utilizar:

require_once "../class/Upload.php";

$up = new Upload( "gallery" );
$up->setDir( "../upload/" )->setExtension( array( "jpg", "png", "JPG", "jpeg" ) )->setSize( 2 );

$name = $up->upload();
#ou
$up->upload();

Bom proveito ^^

No códigoSomar Quantidade De Dia À Uma Data Qualquer

06 dezembro 2011 - 22:35

Ou até mesmo

echo date( "Y-m-d", strtotime( "+ 1 month" ) );

:)

No códigoPaginação Simples

22 fevereiro 2011 - 15:25

@leonardocesar, valeu pelas dicas, tudo que possa fazer eu melhorar minha programação.

Essa classe eu fiz para a página que estava utilizando, eu apenas postei, claro que faltou a classe Conexão, e sobre o XML, ainda estou engatinhando sobre isso, pretendo no futuro estudar mais sobre XML.

Obrigado pela ajuda.