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.