Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hunternh

[Resolvido] Classe para validação de upload de imagens

Recommended Posts

Forma de uso acesse: http://www.wagnersoares.com.br/site/blog/visualizar/5/classe-para-validacao-de-upload-de-imagens-em-php/

 

<?php
/**
 * Classe para validação de upload de imagens
 *
 * @author Wagner Brandão Soares (soareswagner@hotmail.com)
 */
class ImageValidate
{
    // tipos de imagens válidas
    const GIF = IMAGETYPE_GIF;
    const JPEG = IMAGETYPE_JPEG;
    const PNG = IMAGETYPE_PNG;
    const SWF = IMAGETYPE_SWF;
    const PSD = IMAGETYPE_PSD;
    const BMP = IMAGETYPE_BMP;
    const TIFF_II = IMAGETYPE_TIFF_II;
    const TIFF_MM = IMAGETYPE_TIFF_MM;
    const JPC = IMAGETYPE_JPC;
    const JP2 = IMAGETYPE_JP2;
    const JPX = IMAGETYPE_JPX;
    const JB2 = IMAGETYPE_JB2;
    const SWC = IMAGETYPE_SWC;
    const IFF = IMAGETYPE_IFF;
    const WBMP = IMAGETYPE_WBMP;
    const XBM = IMAGETYPE_XBM;
    const ICO = IMAGETYPE_ICO;

    /**
     * Elementos da superglobal $_FILE
     *
     * @var string
     */
    private $_file;

    /**
     * Parâmetros da validação
     *
     * @var array
     */
    private $_config;

    /**
     * Mensagem do último erro
     *
     * @var array
     */
    private $_errorMsg = null;

    /**
     * Construtor da classe
     *
     * @param array $file
     * @param array $config
     * @return void
     */
    public function __construct(array $file, array $config)
    {
        $this->_file = $file;
        $this->_config = $config;
    }

    /**
     * Retorna true se os arquivos são imagens válidas, senão false
     *
     * @return boolean
     */
    public function isValid()
    {
        $file = $this->_normalize($this->_file);

        foreach($file as $image)
        {
            $imageInfo = @getimagesize($image['tmp_name']);

            if($imageInfo === false)
            {
                $this->_errorMsg = 'Formato de arquivo inválido.';

                return false;
            }

            if(isset($this->_config['type']) && is_array($this->_config['type']) && !in_array($imageInfo[2], $this->_config['type']))
            {
                $this->_errorMsg = 'Tipo de imagem inválida.';

                return false;
            }

            if(isset($this->_config['size']) && (($image['size'] / 1024) > $this->_config['size']))
            {
                $this->_errorMsg = 'O peso da imagem ultrapassou o limite.';

                return false;
            }

            if(isset($this->_config['max_width']) && ($imageInfo[0] > $this->_config['max_width']))
            {
                $this->_errorMsg = 'A largura da imagem ultrapassou o limite.';

                return false;
            }

            if(isset($this->_config['max_height']) && ($imageInfo[1] > $this->_config['max_height']))
            {
                $this->_errorMsg = 'A altura da imagem ultrapassou o limite.';

                return false;
            }

            if(isset($this->_config['min_width']) && ($imageInfo[0] < $this->_config['min_width']))
            {
                $this->_errorMsg = 'A largura da imagem é menor que o permitido.';

                return false;
            }

            if(isset($this->_config['min_height']) && ($imageInfo[1] < $this->_config['min_height']))
            {
                $this->_errorMsg = 'A altura da imagem é menor que o permitido.';

                return false;
            }

            if($image['error'] != UPLOAD_ERR_OK)
            {
                switch($image['error'])
                {
                    case UPLOAD_ERR_INI_SIZE:
                    case UPLOAD_ERR_FORM_SIZE:
                        $this->_errorMsg = 'O peso da imagem ultrapassou o limite permitido pelo servidor.';
                        break;
                    case UPLOAD_ERR_PARTIAL:
                        $this->_errorMsg = 'A imagem não foi totalmente enviada.';
                        break;
                    case UPLOAD_ERR_NO_FILE:
                        $this->_errorMsg = 'O arquivo não foi enviado.';
                        break;
                    default:
                        $this->_errorMsg = 'Ocorreu um erro ao tentar enviar a imagem.';
                        break;
                }

                return false;
            }
        }

        return true;
    }

    /**
     * Retorna a mensagem do último erro
     *
     * @return string
     */
    public function getErrorMsg()
    {
        return $this->_errorMsg;
    }

    /**
     * Converte do formato $file['type'][0] para $file[0]['type']
     *
     * @param array $file
     * @return array
     */
    private function _normalize(array $file)
    {
        $aux = array();

        if(!is_array($file['name']))
        {
            $aux[] = $file;
        }
        else
        {
            foreach($file['name'] as $index => $name)
            {
                $aux[$index]['name']        = $name;
                $aux[$index]['type']        = $file['type'][$index];
                $aux[$index]['size']        = $file['size'][$index];
                $aux[$index]['tmp_name']    = $file['tmp_name'][$index];
                $aux[$index]['error']       = $file['error'][$index];
            }
        }

        return $aux;
    }
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.