Criando upload de imagens com PHP OO

Veja neste artigo como criar um sistema de upload de imagens com PHP OO (PHP orientado a objetos) de maneira simples e objetiva.

Antes de mais nada, para se obter um melhor aprendizado é necessário um conhecimento básico de orientação à objetos. Hoje iremos abordar um assunto muito discutido, e bastante útil quando queremos que o usuário envie imagem sem a requisição de login ou senha. Não é necessário BD (banco de dados), pois não vamos gravá-las em um banco de dados. Bem então vamos da início ao nosso artigo.

Upload de arquivos no formato de imagem

Vejamos detalhadamente o nosso formulário de upload desde a criação do form até o upload da imagem para a pasta.

Bem, primeiramente criaremos um arquivo “upload-imagem.php” com a simples estrutura html5.

Listagem 1: Estrura html5 do arquivo "upload-imagem.php"

<!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <title>Upload de Imagens com phpOO</title> </head> <body> <form method="post" action="envia.php" enctype="multipart/form-data"> <p>Entre com uma imagem:</p> <input type="file" name="imagem" required /> <br /> <input type="submit" value="Enviar" /> </form> </body> </html>

Não se esqueça de colocar o enctype=”multipart/form-data”.

Até agora nada de mais. Depois criaremos nossa classe Upload, veremos a explicação da classe por partes até o código final.

Listagem 2: Criando a classe Upload

class Upload{ //Aqui entra nossos atributos e metódos }

Vamos criar uma pasta na raiz, com o nome de “img”. Logo separaremos quais informações serão uteis para começar a criar o nosso método (ou seja, criaremos nossos atributos ou variáveis de classe).

Listagem 3: Criando os atributos para poder usá-los no método de upload da imagem

class Upload{ private $name; //name do input que o usuário colocará a imagem private $pasta; //nome da pasta que receberá a imagem private $nome_substituto; //nome que irá sobrescrever o nome da imagem atual private $permite; //Tipo de imagem permitida, ex:png,jpg,gif,pjpeg,jpeg }

Vamos criar um método com o nome uploadImagem que irá receber como parâmetros o name da imagem, a pasta de destino, o nome principal (ou seja o nome que substituto) e o tipo de imagem que iremos aceitar (separados por virgula).

Listagem 4: Criando o método responsável pelo upload da imagem

public function uploadImagem($name_imagem,$pasta_destino,$nome_principal,$tipo_imagem){ //aqui vem os comandos do método

Vamos fazer uma breve verificação se existe realmente algo no $_FILES[].

Listagem 5: Fazendo a verificação da imagem

publicfunctionuploadImagem($name_imagem,$pasta_destino,$nome_principal,$tipo_imagem){ if(!empty($_FILES[$name_imagem][''tmp_name''])){ //aqui vai entrar o comando } }

Colocamos as extensões aceitas numa array, para que mais tarde possamos fazer uma breve verificação.

Listagem 6: Armazenamento das extensões num array

publicfunctionuploadImagem($name_imagem,$pasta_destino,$nome_principal,$tipo_imagem){ if(!empty($_FILES[$name_imagem][''tmp_name''])){ $tipo_permitido = explode(",", $tipo_imagem); } }

Capturamos o nome da imagem, o caminho da pasta e o seu name

Listagem 7: Capturando os dados, e armazenando em variáveis locais, e variáveis de classe

$this->name = $_FILES[$name_imagem]; $this->pasta = $pasta_destino; $nome = $this->name[''name''];

Pegamos a extensão da imagem enviada e armazenamos numa variável

Listagem8: Capturando a extensão da imagem e armazenando numa variável "extencao"

$extencao = end(explode(".",$this->name[''name'']));

Colocamos o nome que irá sobrescrever o nome da imagem padrão e colocamos dentro de uma variável de classe.

Listagem9: Capturando o nome substituto da imagem

$this->nome_substituto = $nome_principal;

Colocamos o caminho completo da imagem numa variável de upload

Listagem 10: Capturando o caminho da imagem e armazenando na variável "upload_arquivo"

$upload_arquivo = $this->pasta.$this->nome_substituto.".".$extencao;

Agora vamos colocar as extensões permitidas em um array "$this->permite"

Listagem 11: Colocando as extensões permitidas num array

foreach ($tipo_permitido as $key => $tipo) { $this->permite[] = $tipo; }

Caso esteja com dúvidas, quanto ao foreach, execute um var_dump($this->permite) logo após o foreach e você verá que cada tipo de extensão permitido por você está em um determinado índice do array.

Agora iremos verificar se o nome está em branco e se o tipo da imagem consta na variável "permite".

Listagem 12: Verificando o tipo da extensão da imagem

if(!empty($nome) and in_array($this->name[''type''],$this->permite)){ //faça algo }else{ //faça algo caso não seja a extensão permitida echo “formato de imagem não aceito pelo sistema.”; }

Caso esteja na extensão permitida, faremos o upload da imagem.

Listagem 13: Executando o upload da imagem

if(move_uploaded_file($this->name[''tmp_name''], $upload_arquivo)){ echo "imagem enviada"; }else { echo "erro ao enviar a imagem"; }

Terminamos nossa classe upload, então a salvaremos numa pasta chamada: "classes". Agora basta criar a nossa página "envio.php" que receberá o action do formulário que recebe a imagem.

Listagem 14: Criando a página "envio.php"

<?php // irá verificar se o arquivo já foi incluído, e se assim for, não inclui novamente. require_once("classes/upload.php"); $objImagem = new Upload; //chama o método que faz o upload da imagem $objImagem->uploadImagem("imagem","img/","adsdsa","image/jpg,image/jpeg,image/png"); ?>

Note que a classe “upload” está dentro de uma pasta cujo o nome é “classes”.

Bem, assim terminamos nosso upload de imagens com phpOO. Com isto é possível criar desde o mais simples upload de imagens até algo mais avançado aplicando cadastro em banco de dados e etc.

Obrigado por ler este artigo, e espero que tenham gostado.

Um abraço de Clóvis da Silva Neto.

Até a próxima.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados