Função Upload de imagens com tratamento do erros
Olá amigos do forum. Queria ajuda dos amigos para tentar solucionar um problema com uma função de upload de imagens.
Essa função genérica foi retirada de uma classe e adaptada para ser usada em uma função. Essa função não foi tinha tratamento de erros, e não retornava nenhum resultado para que o utilizador da mesma, soubesse se houve algum erro no processo. Então, eu dei uma otimizada para que ficasse mais simples seu uso em meus projetos.
Resumindo: a função foi testada e funciona muito bem com upload de apenas uma imagem por vez, já com upload multiplo não funciona. Vou postar abaixo a função para possam analizar e qualquer sujestão é bem vinda, até mesmo para otimiza-la mais ainda.
function uploadImage($tmp, $nome, $width, $pasta, $file, $path){ //acredito que o erro está no parâmetro $file. Na chamada da função eu envio $_FILES['imagem'] //aumenta a capacidade máxima de tamanho dos arquivos para uload de 2MB, padrão do apache, para 10MB ini_set('post_max_size', '10M'); ini_set('upload_max_filesize', '10M'); //define os tipo de arquivos permitidos $filtro = array("image/jpeg", "image/jpg", "image/pjpeg", "image/gif", "image/png"); //pega url da página atual $urlBack = explode('/',$_SERVER['REQUEST_URI']); $urlBack = $urlBack[2].'/'.$urlBack[3]; $linkBack = 'Clique <a href="'.$urlBack.'" title="Voltar">aqui</a> para voltar.'; //pega extensão do arquivo $ext = substr($nome,-3); $tipo = (string)$file['type']; if(!in_array(trim($tipo), $filtro)){ $err = true; }else{ $dimensoes = getimagesize($file['tmp_name']); $imgW = $dimensoes[0]; $imgH = $dimensoes[1]; if($imgW < $width){ $err = true; } //gera nome único para a imagem switch($ext){ case 'jpg': $nome = md5(uniqid($nome).time()).'.jpg'; break; case 'png': $nome = md5(uniqid($nome).time()).'.png'; break; case 'gif': $nome = md5(uniqid($nome).time()).'.gif'; break; } //verifica tamanho do arquivo em bytes $tamBytes = filesize($tmp); $tamMaximo = (1024 * 1024) * 10; if($tamBytes > $tamMaximo){ $err = true; }else{ switch($ext){ //cria uma nova imagem de acordo com e extensão case 'jpg': $img = @imagecreatefromjpeg($tmp) or die($err = true); break; case 'png': $img = @imagecreatefrompng($tmp) or die($err = true); break; case 'gif': $img = @imagecreatefromgif($tmp) or die($err = true); break; } //obtem largura e altura da imagem criada $x = @imagesx($img) or die($err = true); $y = @imagesy($img) or die($err = true); //define novas dimensão para a imagem $height = ($width * $y) / $x; //cria nova imagem com as novas dimensões $nova = @imagecreatetruecolor($width, $height) or die($err = true); @imagealphablending($nova,false) or die($err = true); @imagesavealpha($nova,true) or die($err = true); @imagecopyresampled($nova, $img, 0, 0, 0, 0, $width, $height, $x, $y) or die($err = true); switch($ext){ //envia as imagens criadas para o novo diretório case 'jpg': @imagejpeg($nova, $pasta.$nome, 100) or die($err = true); break; case 'png': @imagepng($nova, $pasta.$nome) or die($err = true); break; case 'gif': @imagegif($nova, $pasta.$nome) or die($err = true); break; } //libera a memória associada com a imagem imagedestroy($img) or die($err = true); imagedestroy($nova) or die ($err = true); } } //se não retornar nenhum erro, e a variável $path (que retorna o diretório e nome do arquivo) do tipo bolleana for definida como true, então, afunção //retorna o diretório e nome do arquivo if(!$err && $path == true){ return $pasta.$nome; }elseif($err && $path == false){ //se não ocorrer nenhum erro, retorna true return true; }elseif($err){ //caso ocorra algum erro, retorna false return false; }}
Abaixo, um script de testes que chama a função acima.
<?phpif(isset($_FILES['imgs'])){ $img = $_FILES['imgs']; $pastaTeste = 'uploads/testes/'; if(!file_exists($pastaTeste)){ mkdir($pastaTeste); } for($i=0;$i<count($img['tmp_name']);$i++){ $enviada = uploadImage($img['tmp_name'][$i], $img['name'][$i], 800, $pastaTeste, $_FILES['imgs'], true); if(!$enviada){ $return['error'][$i] = 'Não foi possível enviar o arquivo '.$img['name'][$i]; } } if(count($return['error']) <= 0){ echo 'Todas as imagens foram enviadas com exito!'; }else{ for($i=0;$i<count($return['error']);$i++){ echo $return['error'][$i]; } }}?>
Bem, é isso. Esperem que me ajudem nessa tarefa e desde já agradeço a todos.
imasters... fórum tá paradão em!
Discussão (4)
Carregando comentários...