• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gonçalo_ssb

[PHP] Upload de imagem

23 mensagens neste tópico

Ola a todos pessoal,

Há muito que consulto este forum e tem sido muito util para tirar algumas duvidas. Hoje resolvi publicar o meu primeiro tutorial de modo a ajudar aqueles que precisem.

Escolhi como tema o upload de imagem em PHP, visto ser bastante utilizado e ainda não ter encontrado aqui um código que seja facilmente implementado por qualquer programador com conhecimentos mínimos em PHP.

Nome: Upload de imagem

Funcionalidades:

- Upload de Imagem para uma pasta pré-definida

- Verificação do formato da imagem

- Verificação do tamanho da imagem

1º Passo: Criação do form

<form name="upload_imagem" method="post" enctype="multipart/form-data"  action="upload.php">
<table>
    <tr><td><input type="file" name="image"></td></tr>
    <tr><td><input name="Submit" type="submit" value="Upload"></td></tr>
</table>    
</form>

2º Passo: Desenvolvimento da acção do botão de Upload

<?
//Define o tamanho máximo da imagem
define ("MAX_SIZE","100");

//Verifica se o botão de upload foi pressionado
   if(isset($_POST['upload']))
   {
       //Guarda na variável $image o nome completo da imagem (nome+extensão)
       $image = $_FILES['file']['name'];

       //Verifica se existe alguma imagem para ser importada
       if($image)//Existe uma imagem para ser importada
       {
           //Retira os elementos "/"
           $filename = stripslashes($_FILES['file']['name']);

           //Verifica qual a extensão do ficheiro
           $extension = getExtension($filename);

           //Coloca todos os caracteres da extensão com letra minúscula
           $extension = strtolower($extension);

           //Verifica os formatos de imagem que podem ser importados
           if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "gif"))//Formato diferente dos permitidos 
           {
               //print error message
                echo "<strong>Imagem:</strong> Este formato não pode ser importado! Utilize o formato jpg ou gif";
           }
           else//Formato permitido
           {
               //Verifica qual o tamanho da imagem seleccionada
                $size=filesize($_FILES['file']['tmp_name']);

               //Verifica se o tamanho é superior a 100kb
               if ($size > MAX_SIZE*1024)//tamanho superior
               {
                   echo "A imagem nao pode exeder o tamanho de 100kb";
               }
               else//tamanho inferior
               {
                   //Gera um nome para a imagem
                   $image_name=time().'.'.$extension;

                   //Directoria para a qual a imagem será enviada
                   $newname="fotos/".$image_name;

                   //Efectua o upload da imagem para a directoria
                   $copied = copy($_FILES['file']['tmp_name'], $newname);

                   //Verifica se o upload foi efectuado com sucesso
                   if ($copied) //Upload bem sucedido
                   {
                       echo "Upload da imagem foi efectuado com sucesso";         
                   }
                   else//Upload mal sucedido
                   {
                       echo "Não foi possível efectuar o upload da imagem";
                   }
               }
           }
       }
       else//Não existe nenhuma imagem para ser importada 
       {
           echo "Seleccione uma imagem";
       }

   }    
?>

Observação: Caso tenha indicado alguma coisa mal, agradeço que mo indiquem e caso haja uma implementação de modo a melhorar este código, façam favor de efectuar a sua correção. Obrigado.

1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Posso até efectuar uma página completa com estrutura HTML, se calhar é mais vantajoso para as pessoas que ainda não têm bem a noção de estruturação. O que acham da criação Vou criar versão 1.2 deste tutorial

já com o link a ficar associado a uma tabela de imagens, para posteriormente ser usado por exemplo numa noticia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podias fundir tudo no mesmo ficheiro,mas bom trabalho na mesma :P

Concordo com o Gonçalo_ssb.  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom tutorial, muito simples de seguir, limpinho e bom documentado com comentários.

Keep it coming.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas pessoal,há alguma maneira de quando clicamos no botão para fazer browse ao que pretendemos fazer o upload só aparecer ficheiros com uma dada extensão?Ou seja,quando quero fazer o upload de jpg´s , clico no botão browse e apenas me aparece os jpg´s daquela pasta??

Obrigado,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho uma sugestão

na verificação do tamanho da imagem a mensagem não deve ser

echo "A imagem nao pode execer o tamanho de 100kb";

mas sim qq coisa como

echo 'A imagem não pode exceder o tamanho de '. MAX_SIZE .'kb';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é útil uma vez que podemos definir o tamanho da imagem e assim com a concatenação ele actualiza automaticamente...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

entao... e metem na wiki... e... a função getExtension?!

Se fosse para "partilhar código incompleto" em alguns casos mais valia meter o code na wiki if(isset($_POST['upload'])) makeUpload($_FILES)  sem qualquer referência ao código....

Resumindo, está bom, e é bom partilhar, mas se partilham dêm tudo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se não foi incluido foi por lapso meu, lapso esse que peço desculpa, de qualquer das formas aqui vai:

// Função que permite saber qual a extensão da imagem
function getExtension($str) 
{
    	$i = strrpos($str,".");
    	if (!$i) 
	{ 
		return ""; 
	}
    	$l = strlen($str) - $i;
    	$ext = substr($str,$i+1,$l);
	return $ext;
	}

Agradeço já agora que adicionem á wiki afim de corrigir o tutorial.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agradeço já agora que adicionem á wiki afim de corrigir o tutorial.

Tu próprio podes fazer isso. ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agradeço já agora que adicionem á wiki afim de corrigir o tutorial.

Tu próprio podes fazer isso. ;)

Mas eu já fiz  :)

Na altura, quando o passei, e porque não experimentei, pensei que seria uma função já existente, mas ainda bem que alguém reparou. 

Em todo caso, sempre que falte algo num artigo da wiki que considerem relevante, mesmo que não sejam artigos vossos, podem melhorá-los  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Portugal Imagens</title>
</head>

<body>
<?
//Define o tamanho máximo da imagem
define ("MAX_SIZE","100");
//Define a largura máxima que a imagem pode ter
define ("LARGURA","800");    


//Verifica se o botão de upload foi pressionado
if(isset($_POST['upload'])){
   //Guarda na variavél $image o nome completo da imagem (nome+extensão)
   $image = $_FILES['file']['name'];

   //Verifica se existe alguma imagem para ser importada
   if($image){//Existe uma imagem para ser importada
       //Retira os elementos "/"
       $filename = stripslashes($_FILES['file']['name']);

       //Verifica qual a extensão do ficheiro
       $extension = getExtension($filename);

       //Coloca todos os caracteres da extensão com letra minuscula
       $extension = strtolower($extension);

       //Verifica os formatos de imagem que podem ser importados
       if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "gif")){//Formato diferente dos permitidos 
           //mostra uma mensagem de erro
            echo "<strong>Imagem:</strong> Este formato não pode ser importado! Utilize o formato jpg ou gif";
        }
        else {//Formato permitido
           //Verifica qual o tamanho da imagem seleccionada
            $size=filesize($_FILES['file']['tmp_name']);
                        //Guarda o tamanho da imagem seleccionada
               $tamanho = getimagesize($_FILES['file']['tmp_name']);

                        $largura = $tamanho[0];//Posição 0 do array-> largura da imagem
           $altura  = $tamanho[1];//Posição 1 do array-> altura da imagem


           //Verifica se o tamanho é superior ao máximo em kb
           if ($size > MAX_SIZE*1024){//tamanho superior
                  echo 'A imagem não pode exceder o tamanho de '. 100 .'KB';
           }
                        else if ($largura > LARGURA)
           {
                 echo 'A imagem que pretende inserir não pode exceder a largura de'. 5000 .'PX';
           }
           else 
                        {//tamanho inferior
               //Gera um nome para a imagem
               $image_name=time().'.'.$extension;

               //Directoria para a qual a imagem será enviada
               $newname="fotos/".$image_name;

               //Efectua o upload da imagem para a directoria
               $copied = copy($_FILES['file']['tmp_name'], $newname);

               //Verifica se o upload foi efectuado com sucesso
               if ($copied){ //Upload bem sucessido
                   echo "Upload da imagem foi efectuado com sucesso";
                }
               else {//Upload mal sucessido
                        echo "Não foi possivél efectuar o upload da imagem";
               }
           }
       }
    }
   else {//Não existe nenhuma imagem para ser importada 
                echo "Seleccione uma imagem";
       }
}
// Função que permite saber qual a extensão da imagem
function getExtension($str){
    $i = strrpos($str,".");
    if (!$i) return ""; 
    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
}    
?>
</body>
</html>

Esse código não está a dar.

Meto uma imagem e depois aparece:

Imagem: Este formato não pode ser importado! Utilize o formato jpg ou gif"; } else {//Formato permitido //Verifica qual o tamanho da imagem seleccionada $size=filesize($_FILES['file']['tmp_name']); //Guarda o tamanho da imagem seleccionada $tamanho = getimagesize($_FILES['file']['tmp_name']); $largura = $tamanho[0];//Posição 0 do array->  largura da imagem $altura = $tamanho[1];//Posição 1 do array-> altura da imagem //Verifica se o tamanho é superior ao máximo em kb if ($size > MAX_SIZE*1024){//tamanho superior echo 'A imagem não pode exceder o tamanho de '. 100 .'KB'; } else if ($largura > LARGURA) { echo 'A imagem que pretende inserir não pode exceder a largura de'. 5000 .'PX'; } else {//tamanho inferior //Gera um nome para a imagem $image_name=time().'.'.$extension; //Directoria para a qual a imagem será enviada $newname="fotos/".$image_name; //Efectua o upload da imagem para a directoria $copied = copy($_FILES['file']['tmp_name'], $newname); //Verifica se o upload foi efectuado com sucesso if ($copied){ //Upload bem sucessido echo "Upload da imagem foi efectuado com sucesso"; } else {//Upload mal sucessido echo "Não foi possivél efectuar o upload da imagem"; } } } } else {//Não existe nenhuma imagem para ser importada echo "Seleccione uma imagem"; } } // Função que permite saber qual a extensão da imagem function getExtension($str){ $i = strrpos($str,"."); if (!$i) return ""; $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; } ?> 

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Jakoozie9

Talvez estejas a tentar fazer upload de um .png. É que não está na lista de extensões autorizadas (n sei pq =S)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Jakoozie9

abre o codigo php com "<?php " do que "<?"......

cumprimentos, brunocatarino4

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gente preciso de uma ajudita acerca disto.

Ja implementei o codigo mas quando carrego para fazer upload ele passa-me a pagina upload.php . Ate aqui tudo bem, mas o que é certo é que  depois a pagina aparece-me em branco :S

Sugestoes?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dá-me erro na linha 11

$image = $_FILES['file']['name'];

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este "Tutorial" está óptimo, resta-me agora saber é como é que altera para outra imagem?

Imaginemos, eu envio a imagem para o servidor, e guardo na base de dados o link para essa imagem.

E querendo eu fazer um update da imagem, tenho que actualizar esse link, mas para o fazer tenho à mesma que utilizar as verificações normais do ficheiro que está a ser submetido, o problema é q como a imagem que se encontra no servidor é diferente da que eu quero voltar a meter, surgem-me duas perguntas:

- Apago a actual e meto uma nova? Delete Insert? (Como se apaga uma imagem do servidor por código php?)

- Substituir File? (Como qual é código?)

- Ou tenho sempre que inserir uma nova e linkar a essa?

Mais lógico será apagar a actual e inserir a nova Certo?

Quais são os códigos que fazem isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este "Tutorial" está óptimo, resta-me agora saber é como é que altera para outra imagem?

Imaginemos, eu envio a imagem para o servidor, e guardo na base de dados o link para essa imagem.

E querendo eu fazer um update da imagem, tenho que actualizar esse link, mas para o fazer tenho à mesma que utilizar as verificações normais do ficheiro que está a ser submetido, o problema é q como a imagem que se encontra no servidor é diferente da que eu quero voltar a meter, surgem-me duas perguntas:

- Apago a actual e meto uma nova? Delete Insert? (Como se apaga uma imagem do servidor por código php?)

- Substituir File? (Como qual é código?)

- Ou tenho sempre que inserir uma nova e linkar a essa?

Mais lógico será apagar a actual e inserir a nova Certo?

Quais são os códigos que fazem isso?

Boas,

Para apagares um ficheiro em PHP é usado o comando

<?php
unlink('path para ficheiro.extensao');
?>

Sim, é mais simples apagar a imagem, upload da nova imagem e update na DB com o link para a nova imagem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Para apagares um ficheiro em PHP é usado o comando

<?php
unlink('path para ficheiro.extensao');
?>

Sim, é mais simples apagar a imagem, upload da nova imagem e update na DB com o link para a nova imagem.

Ok, Obrigado!

Edit: O MK2, tens de mudar o ['file'] para ['image'] se é isso que estás a usar!! xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora