hunternh 2 Denunciar post Postado Dezembro 1, 2010 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