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.
QUOTE
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
CODE
<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>
<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
CODE
<?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]}')");
}
}
}
?>
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
CODE
<?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();
?>
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
CODE
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
?>
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!