Classe Upload Simples e compacta!
Postado por xorna em December 12th, 2007 salvo em PHP, Software LivreMuitas pessoas busca por uma maneira simples de executar seus uploads, mas parece que o pessoal que posta por aà funções e classe complica demais, as vezes você só quer mandar sua imagemzinha, mudar o nome e redimensionar, certo? Mas espero acabar com esse problema agora mesmo, com uma classe de upload super simples que eu fiz. Ela está adaptada a minhas necessidades momentâneas, mas pode ser alterada facilmente. Abaixo segue o código e depois um exemplo super simples.
<?php
### Classe Upload
### Autor: Xorna (falecomoxorna@blogdoxorna.com) Mantenha estes créditos!
## Faz o upload de imagens, muda seu nome e redimensiona ao mesmo tempo
# Versão 1.0
class upload{
# Declaração das propriedades
private $nome;
private $arquivo;
private $tipo;
private $tamanho;
private $temp;
private $mime = array(’image/jpeg’,'image/jpg’,'image/gif’,'image/pjpeg’);
private $ext;
private $tamanho_max = 600000;### Método construtor
## Paramentro: o array do arquivo a ser gravado
# Pega os dados a partir do array arquivo
public function __construct($arquivo){
$this->nome = $arquivo[’name’];
$this->tipo = $arquivo[’type’];
$this->tamanho = $arquivo[’size’];
$this->temp = $arquivo[’tmp_name’];
}# Verifica o MIME da imagem
public function verifica(){
if(in_array($this->tipo, $this->mime)){
$valida = true;
}else{
$valida = false;
}
return $valida;
}# Abre uma imagem de acordo com seu MIME
public function abreImagem($img){
switch($this->tipo){
case “image/gif”:
$imagem = imagecreatefromgif($img);
$this->ext = “gif”;
break;
default:
$imagem = imagecreatefromjpeg($img);
$this->ext = “jpg”;
break;
}
return $imagem;
}## Mero método para facilitar a vida de quem usa
# Ele pega um path relativo e transforma em absoluto
public function ajustaPath($path){
$path = realpath($path);
$path = str_replace(”\\”, “/”, $path);
}### Método para o upload
## Parametros:
## $nova_largura
## $path (endereço relativo)
## $novo_nome
# abre a imagem, redimensiona e salva no lugar especificado com o nome especificado
public function redimensiona_salva($nova_largura, $path, $novo_nome){
if($this->verifica() && $this->tamanho <= $this->tamanho_max){
$this->ajustaPath($path);
$img = $this->abreImagem($this->temp);
$largura_original = imagesx($img);
$altura_original = imagesy($img);
$razao = $altura_original/$largura_original;
$nova_altura = $nova_largura * $razao;
$nova_imagem = imagecreatetruecolor($nova_largura, $nova_altura);
imagecopyresampled($nova_imagem, $img, 0, 0, 0, 0, $nova_largura + 1, $nova_altura + 1, $largura_original, $altura_original);
imagejpeg($nova_imagem, “$path/$novo_nome.$this->ext”, 95);imagedestroy($img);
imagedestroy($nova_imagem);
}else{
# Falta inventar algo para validar isso…
# Inventa você aÅ
}}
public function __destruct(){
}
}
?>
E agora olhem que simples para utilizar a classe =):
<?php
require(”upload.php”);$up = new upload($_FILES[’arquivo’]);
$largura_final = 200;
$path = “img”;
$novo_nome = “xorna”;$up->redimensiona_salva($largura_final, $path, $novo_nome);
?>
<html>
<body>
<form action=”teste.php?acao=vai” method=”post” enctype=”multipart/form-data”>
<input name=”arquivo” type=”file” />
<input name=”vai” type=”submit” />
</form>
</body>
</html>
Por essa vocês não imaginavam né… pois é, pra que complicar…

December 19th, 2007 em 4:36 pm
Muito boa classe!
Vou pegar ela e dar uma adaptada!
Ah.. Só uma sugestão..
Quando você tem muitas propriedades que não tem valor inicial declarado, ocupa menos espaço se você fizer tudo na mesma linha, por exemplo:
private $nome, $arquivo, $tipo, $tamanho, $temp, $ext;
Abraçoooo!!!
December 19th, 2007 em 4:39 pm
Pois é Rafa… eu pensei em colocar assim… mas preferi deixar separado para ficar mais didático… e acho tbm que é mais um vÃcio adquirido com java =(… hehee
June 28th, 2008 em 3:41 pm
Otima Classe simples e Objetiva Vou começar a Utiliza-la.
July 2nd, 2008 em 6:01 pm
Que bom saber que você gostou dela Adriano, ultimamente tenho feito algumas alterações nela, mas sem perder a facilidade de manipulação que ela tem… em breve postarei… obrigado pela visita e o comentário!