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