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.