How do I validate the file size, the size of the image, and the file type that will be used in Upload before submitting?
In order to upload I use the function below in PHP, but the validation happens only after sending the form through POST
, which causes a disturbance to the user because of the refresh on the page.
//****** Enviando a imagem através de Upload *****//
// colocando um nome aleatorio na imagem que será utilizada no upload
$nomealeatorio = md5(uniqid(time())) . strrchr($_FILES['imagem']['name'], ".");
// função para verificar se existe um diretorio padrão cadastrado (utilizado para fins de desenvolvimento);
diretorio();
if(Empty($dir)){
$upload['diretorio'] = $_SERVER['DOCUMENT_ROOT'].'/images/fotos/'.$nomealeatorio;
// diretorio que será gravado no banco
$upload['caminho'] = '/images/fotos/'.$nomealeatorio;
}else{
$upload['diretorio'] = $_SERVER['DOCUMENT_ROOT'].'/'.$dir.'/images/fotos/'.$nomealeatorio;
// diretorio que será gravado no banco
$upload['caminho'] = '/'.$dir.'/images/fotos/'.$nomealeatorio;
}
// tamanho do arquivo em bytes
$upload['tamanho'] = 1024 * 1024 * 2; // 2mb
// extensao do arquivo
$upload['extensoes'] = array('jpg', 'png', 'jpeg');
// salvando nome do arquivo na variavel
$img = $_FILES['imagem']['tmp_name'];
// obtendo a dimensao do arquivo
$upload['dimensao'] = getimagesize($img);
// tratando os erros do Upload através do PHP
$upload['erro'][0] = 'Não houve Erro';
$upload['erro'][1] = 'O Arquivo é maior que o limite do Php, tente novamente com um arquivo menor ou contate o Administrador.';
$upload['erro'][2] = 'O Arquivo é maior que o limite do Html, tente novamente com um arquivo menor ou contate o Administrador.';
$upload['erro'][3] = 'Erro upload realizado parcialmente';
$upload['erro'][4] = 'Upload não realizado, tente novamente ou contate o Administrador do Sistema';
// verifica se houve erro no upload, se existir exibe a mensagem e aborta a operação;
if ($_FILES['imagem']['error'] != 0) {
die("Não foi possivel fazer o upload do arquivo, " . $upload['erro'][$_FILES['imagem']['error']]);
exit;
}
// repassando o nome do arquivo para a variavel caminho
$caminho = $_FILES['imagem']['name'];
// dividindo uma string em strings
$separador = explode('.', $caminho);
// transformando os valores em minusculo
$valida_extensao = strtolower(end($separador));
// ****************************************************Verificando o tamanho da imagem **************************************************//
if(($upload['dimensao'][0] < 250) or ($upload['dimensao'][1] < 250)) {
echo('Não foi possivel fazer o upload do arquivo, para enviar um arquivo é necessário que ele seja imagem e que tenha mais de 250px de largura e 250px de altura, tente novamente ou contate o Administrador');
exit;
}
// ****************************************************Verificando a extensão***************************************************************//
if (array_search($valida_extensao, $upload['extensoes']) === false) {
echo'Atenção, Esse formato de arquivo não é permitido, envie arquivos do tipo, JPG, JPEG, PNG. O Upload não será realizado, Operação Abortada';
exit;
}
// ****************************************************verificando o tamanho do arquivo**************************************************//
if ($upload['tamanho'] < $_FILES['imagem']['size']) {
echo'Atenção, O Arquivo enviado excede o limite de 2MB permitido, reduza o arquivo ou envie outro de até 2 Mb. O Upload não será realizado, Operação Abortada';
}
// ****************************************************Verificando se é possivel mover o arquivo****************************************//
if(move_uploaded_file($_FILES['imagem']['tmp_name'], $upload['diretorio'])) {
//******************************************************Realizando o Insert na Tabela ***************************************************//
// Instanciando a Classe Responsável por Exibir Mensagens de Alerta para os usuários
$msg = new Mensagem_alerta();
// instancia a classe Fotos.
$fotos = new Fotos();
// repassa os parametros para o objeto
$fotos->setTitulo($titulo);
$fotos->setGooglemaps($googlemaps);
$fotos->setTipo($tipo);
$fotos->setTelefone($telefone_fixo);
$fotos->setEmail($email);
$fotos->setCaminho_foto($upload['caminho']);
// iniciando o metodo de Inserir
$objeto->FotosInsert($fotos);
// mensagem de erro para o usuario
echo" <div class='alert alert-success text-center' id='mensagem'role='alert'>";
echo $msg->msgcadastrosucesso();
echo"</div>";
}
else {
echo'Falha no Upload, se o problema Persistir, contate o Administrador';
}