Ir para conteúdo
Fórum Script Brasil
  • 0

Upload de Imagens


BetoGroo

Pergunta

Olá!

Estou começando agora com PHP, e gostaria postar um script.

É um script simples, para upload de imagens.

Vou incrementando dia a dia.

Farei ainda tratamento de erros, e criar a miniatura quadrada, sem distorção

Por favor, comentem, critiquem, e deem dicas.

28/08/2009 -> Sobe a imagem, compacta, cria miniatura e grava dados em banco de dados.

23/08/2009 -> Apenas sobe e renomeia a imagem.

Arquivos:

  • index.php: Formulário de envio
  • Upload.class.php: Classe para o envio
  • upload.php: Ação do formulário
  • banco.sql: Script de criação do banco de dados

index.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload de múltiplas imagens</title>
</head>

<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<fieldset><legend>Upload de Imagens</legend>
<?php
    for ($i=0; $i<3; $i++){
?>
<input name="arquivo[]"  id="arquivo[]" type="file" />

<br />
<?php } ?>
<input type="submit" name="button" id="button" value="Enviar" />
</fieldset>

</form>
</body>
</html>
Upload.class.php
<?php

    class Upload{
        var $qtd;
        var $imagem;
        var $dir;
        var $dirMini;
        var $tamanho;
        
        function __construct($qtd, $imagem, $dir, $tamanho){
            $this->qtd = $qtd;
            $this->imagem = $imagem;
            $this->dir = $dir; 
            $this->dirMini = $dir . 'mini/';
            $this->tamanho = $tamanho;
            self::tipoImagem();
            self::nomeImagem();    
        }
        
        function gethash(){
            for($i=0; $i<$this->qtd; $i++){
                $this->imagem['hash'][$i] = md5_file($this->dir.$this->imagem['nome'][$i]);
            }
            
        }
        
        function getDimensao(){
            for ($i=0; $i<$this->qtd; $i++){
                $dimensao[$i] = getimagesize($this->dir.$this->imagem['nome'][$i]);
                $this->imagem['largura'][$i] = $dimensao[$i][0];
                $this->imagem['altura'][$i] = $dimensao[$i][1];
                if($this->imagem['largura'][$i] > $this->imagem['altura'][$i]){
                    $this->imagem['novaLargura'][$i] = $this->tamanho;
                    $this->imagem['novaAltura'][$i] = $this->tamanho*$this->imagem['altura'][$i]/$this->imagem['largura'][$i];
                }else{
                    $this->imagem['novaAltura'][$i] = $this->tamanho;
                    $this->imagem['novaLargura'][$i] = $this->tamanho*$this->imagem['largura'][$i]/$this->imagem['altura'][$i];
                }
            }
        }
        
        function nomeImagem(){
            for ($i=0; $i<$this->qtd; $i++){
                $this->imagem['nome'][$i] = date('YmdHis') . "_" . substr(md5(time() * rand(1,9999) * rand(1,999)),0,14).
                $this->imagem['tipo'][$i];
            
            }
        }
        
        function tipoImagem(){
            for ($i=0; $i<$this->qtd; $i++){
                switch ($this->imagem['type'][$i]){
                    case 'image/jpeg':
                        $this->imagem['tipo'][$i] = '.jpg';
                        break;
                    case 'image/pjpeg':
                        $this->imagem['tipo'][$i] = '.jpg';
                        break;
                    case 'image/gif':
                        $this->imagem['tipo'][$i] = '.gif';
                        break;
                    case 'image/bmp':
                        $this->imagem['tipo'][$i] = '.bmp';
                        break;
                    case 'image/png':
                        $this->imagem['tipo'][$i] = '.png';
                        break;
                }
            }
        }
        
        function enviaImagem(){
            for ($i=0; $i<$this->qtd; $i++){
                move_uploaded_file ($this->imagem['tmp_name'][$i], $this->dir . $this->imagem['nome'][$i]);
                copy($this->dir . $this->imagem['nome'][$i], $this->dirMini . $this->imagem['nome'][$i]);
            
            }
        }
    
        function criaImagem(){
            for ($i=0; $i<$this->qtd; $i++){
                $novaImagem[$i] = imagecreatetruecolor($this->imagem['novaLargura'][$i], $this->imagem['novaAltura'][$i]);
                $origem[$i] = imagecreatefromjpeg($this->dir.$this->imagem['nome'][$i]);
                imagecopyresized($novaImagem[$i], $origem[$i], 0,0,0,0, $this->imagem['novaLargura'][$i],
                $this->imagem['novaAltura'][$i], $this->imagem['largura'][$i], $this->imagem['altura'][$i]);
                imagejpeg($novaImagem[$i], $this->dir . $this->imagem['nome'][$i],80);
            }
        }
        
        function criaMini(){
            for ($i=0; $i<$this->qtd; $i++){
                $novaImagem[$i] = imagecreatetruecolor(100, 100);
                $origem[$i] = imagecreatefromjpeg($this->dirMini.$this->imagem['nome'][$i]);
                imagecopyresized($novaImagem[$i], $origem[$i], 0,0,0,0, 100,
                100, $this->imagem['largura'][$i], $this->imagem['altura'][$i]);
                imagejpeg($novaImagem[$i], $this->dirMini . $this->imagem['nome'][$i],80);
            }
        }
        
        
        
        
        function InsereBanco(){
            $conn = new PDO('mysql:host=localhost; dbname=upload', 'root', '');
            for($i=0; $i<$this->qtd; $i++){
                $conn->exec("INSERT INTO imagem (url_imagem, url_mini, hash_imagem) VALUES ('{$this->dir}{$this->imagem['nome'][$i]}', '{$this->dirMini}{$this->imagem['nome'][$i]}', '{$this->imagem['hash'][$i]}')");
            }
        } 
    }
?>
upload.php
<?php

function __autoload($classe){
        include_once "{$classe}.class.php";
    }

    $img = new Upload(3, $_FILES['arquivo'], 'images/', 400);
    $img->enviaImagem();
    $img->gethash();
    $img->getDimensao();
    $img->criaImagem();
    $img->criaMini();
    $img->insereBanco();

?>
banco.sql
CREATE DATABASE `upload` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
USE `upload`;


CREATE TABLE IF NOT EXISTS `imagem` (
  `id_imagem` int(11) NOT NULL AUTO_INCREMENT,
  `url_imagem` varchar(50) COLLATE utf8_bin NOT NULL,
  `url_mini` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `hash_imagem` char(32) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id_imagem`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin

?>

Um abraço a todos!

Editado por BetoGroo
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...