Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;
}
}
?>Carregando comentários...