Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Macêdo

Upload + ZIP + Fotos + Manipulação de Imagens

Recommended Posts

Estou criando um sistema de galeria de fotos utilizando upload de arquivos ZIP e estou precisando de ajuda em algumas coisas.

 

BANCO DE DADOS

CREATE TABLE IF NOT EXISTS `eventos` (
  `id` int(255) NOT NULL auto_increment,
  `titulo` text NOT NULL,
  `local` text NOT NULL,
  `cidade` text NOT NULL,
  `data` text NOT NULL,
  `bandas` text NOT NULL,
  `foto` text NOT NULL,
  `diretorio` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=269 ;

INSTRUÇÕES 1

1- Criar uma pasta com a data invertida e um número aleatório dentro da pasta ORIGINAIS e também dentro da pasta EVENTOS (incluindo a pasta thumbs dentro do EVENTOS);

2- Cadastrar no banco de dados MySQL as informações do evento;

 

INSTRUÇÕES 2

1- Upload do arquivo ZIP (form_upload.php envia para processar.php)

2- Extrair em um diretório temporário (/TEMP)

3- Copiar os arquivos (fotos) originais para a pasta ORIGINAIS

4- Processar todas as fotos da pasta TEMP utilizando a classe de manipulação de imagens (ele pode mover arquivos, criar thumbs, redimensionar, colocar marca) **** Ao manipular as fotos e mover para a pasta do evento, verificar se o arquivo já existe e modificar o nome para n sobrescrever ****;

5- Limpar a pasta temporária (/TEMP)

 

INSTRUÇÕES 3

- Listar as thumbs em uma tabela com a opção de apagar a foto; (Estou pensando em fazer algo sem a necessidade de cadastrar as imagens no BD, para evitar o consumo excessivo do servidor. Estava querendo fazer a listagem pela leitura do diretório 'thumbs' e ao mandar excluir, ele apagar o arquivo diretamente usando unlink(), então ao clicar ele iria deletar o arquivo da pasta thumbs e tbm da pasta do evento)

 

ESTRUTURA DOS ARQUIVOS:

- index.php (listagem dos eventos cadastrados no BD, possível editar dados, ir para página de listagem das fotos, excluir evento)

- form_eventos.php (INSTRUÇÕES 1)

- cadastra_evento.php (INSTRUÇÕES 1)

- form_upload.php (INSTRUÇÕES 2)

- processar.php (INSTRUÇÕES 2)

- listar_fotos.php (INSTRUÇÕES 3)

- /TEMP

 

- /ORIGINAIS

-- /NOME_DO_LOCAL (local do evento)

--- /DATA_NUMERO (Aqui será o nome da pasta com a data na forma invertida "ANO+MES+DIA_NUMERO", com um numero gerado aleatóriamente para a pasta do evento)

 

- /EVENTOS

-- /NOME_DO_LOCAL (local do evento)

--- /DATA_NUMERO (Aqui será o nome da pasta com a data na forma invertida "ANO+MES+DIA_NUMERO", com um numero gerado aleatóriamente para a pasta do evento)

---- /THUMBS (miniaturas das fotos contidas na pasta no nível superior a ela, ou seja, na pasta "DATA_NUMERO")

 

Abaixo segue o código dos arquivos que já comecei a montar:

PROCESSAR.PHP

<?php
// PASSO 1 - Receber o arquivo enviado pelo form_upload.php


// PASSO 2 - ExtraiR os arquivos na pasta TEMP
function extrair($arquivo, $destino) {

    $zip = new ZipArchive;
    $res = $zip->open($arquivo);
    if ($res === TRUE) {
        $zip->extractTo($destino);
        $zip->close();
        return TRUE;
    } else {
        return FALSE;
    }

} // fim da função

extrair('fotos.zip','./temp'); 


// PASSO 3 - Copiar os arquivos originais da pasta TEMP para a pasta ORIGINAIS, dentro da pasta criada para aquele devido evento


// PASS0 4 - Processar todas as fotos da pasta TEMP utilizando a classe de manipulação de imagens

?>

* Estou precisando de um script de upload bem seguro que permita apenas arquivo ZIP e limite o tamanho do arquivo a 8MB para concluir o PASSO 1;

* Como faço para 'varrer' a pasta TEMP e sair copiando os arquivos para outra pasta? Sei que devo usar um comando de repetição tipo o WHILE, mas pra isso eu tenho que fazer um comparativo. Problema que não sei qual seria ele.

* O mesmo processo de varrer a pasta TEMP, só que iria utilizar os comandos da classe de manipulação de imagens.

 

Gostaria da contribuição de vocês na criação desse sistema, tanto nos códigos (corrigir erros, indicar formas melhores, montar o script), como nas sugestões e idéias. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Abraços! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui o código de varrer o diretório e copiar os arquivos de uma pasta pra outra, mas está dando erro. Alguém poderia me dar uma ajuda?

 

ERRO:

IMG_0221.JPG - Copiando...
Warning: copy(IMG_0221.JPG) [function.copy]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP3.1\www\teste\zip\processar.php on line 30
falha ao copiar IMG_0221.JPG
IMG_0222.JPG - Copiando...
Warning: copy(IMG_0222.JPG) [function.copy]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP3.1\www\teste\zip\processar.php on line 30
falha ao copiar IMG_0222.JPG
IMG_0225.JPG - Copiando...
Warning: copy(IMG_0225.JPG) [function.copy]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP3.1\www\teste\zip\processar.php on line 30
falha ao copiar IMG_0225.JPG

CÓDIGO:

// PASSO 3 - Copiar os arquivos originais da pasta TEMP para a pasta ORIGINAIS, dentro da pasta criada para aquele devido evento
$pasta = "./temp";
$destino = "../originais";
if ($handle = opendir($pasta)) {
    while (false !== ($arquivo = readdir($handle))) {
        if ($arquivo != "." && $arquivo != "..") {
            echo "$arquivo - Copiando... ";
			if (!copy($arquivo, $destino)) {
 			   echo "<font color='#FF0000'>falha ao copiar $arquivo</font><br>";
			} // fim do if do comando copiar
        } // fim do if de leitura de arquivo
    } // fim do while de leitura das pasta
    closedir($handle);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me ajuda ae Matias no código. ;)

 

A estrutura das pastas está como eu disse no primeiro post.

 

Quando eu faço o upload do arquivo ZIP, ele extrai as fotos na pasta TEMP. Dessa pasta TEMP eu quero copiar os arquivos para a pasta ORIGINAIS.

 

Estou tentando usar esse comando recursivo, mas ta dando algo errado exatamente com o caminho do arquivo. Mas não to achando o erro.

 

Agradeço se ajudar! Enquanto isso estou tentando aqui...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente eu estava especificando o diretório errado.

 

Resolvi essa parte assim:

$pasta 		= "./temp/";
if ($handle = opendir($pasta)) {
    while (false !== ($arquivo = readdir($handle))) { // gerar fotos com barras e copiar para a pasta do evento
        if ($arquivo != "." && $arquivo != ".." && $arquivo != "Thumbs.db") {
        // Executa os comandos de manipulação nas imagens
	   copy([b]$pasta.[/b]$arquivo, './originais/'.$arquivo);
        } // fim do if de processamento das fotos
    } // fim do while de leitura das pasta

 

Estou indo para os outros problemas:

- Estou precisando de um script de upload bem seguro que permita apenas arquivo ZIP e limite o tamanho do arquivo a 8MB para concluir o PASSO 1;

- Quanto a parte de manipulação das imagens, estou esperando o Beraldo responder o tópico da classe dele, pra ver se ele ajuda na modificação que eu falei lá. Assim eu poderei concluir os PASSOS 3 e 4. Link do post da classe

 

Continuo aguardando ajuda de vocês... Abraços! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

- Estou precisando de um script de upload bem seguro que permita apenas arquivo ZIP e limite o tamanho do arquivo a 8MB para concluir o PASSO 1;

Isso ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

TiuTalk, ajudou completamente!

 

Agora vejam se vocês conseguem me ajudar com isso; Quero que este código varra a pasta TEMP, insira a marca nas fotos, crie os arquivos thumbs, mova os arquivos MARCADOS para a pasta "EVENTOS", as miniaturas para a pasta "/EVENTOS/THUMBS" e as fotos originais para a pasta "ORIGINAIS".

 

Eu até consegui fazer boa parte disso, mas fiz comandos muito repetitivos e sei que dá pra fazer tudo de uma vez só dentro de um único WHILE. Problema que já estou endoidando com isso.

 

Vejam como está ficando o código desta parte:

// PASS0 4 - Processar todas as fotos da pasta TEMP utilizando a classe de manipulação de imagens e apaga as originais depois de utilizar
$pasta = "./temp/"; // caminho da pasta temporária
$pasta_evento = "./eventos/20090801_01/"; // caminho da pasta das fotos marcadas
$pasta_thumbs = "./eventos/20090801_01/thumbs/"; // caminho da pasta das miniaturas

if ($handle = opendir($pasta)) {
    while (false !== ($arquivo = readdir($handle))) { // gerar fotos com barras dentro da pasta TEMP
        if ($arquivo != "." && $arquivo != ".." && $arquivo != "Thumbs.db") {
            // Executa os comandos de manipulação nas imagens
			$ImgHandler = new ImgHandler();
			$foto 		= $ImgHandler->saveImg($pasta."/".$arquivo);
			$marcada 	= $ImgHandler->insertLogo($foto); // insere a logomarca na foto
			unlink($pasta.$arquivo); // apaga as fotos originais das pasta TEMP
        } // fim do if de processamento das fotos
    } // fim do while de leitura das pasta

// PASSO 5 - Envia as fotos com marca para a pasta do evento e apaga as que estão na pasta TEMP
if ($handle = opendir($pasta)) {
    while (false !== ($arquivo = readdir($handle))) {
        if ($arquivo != "." && $arquivo != ".." && $arquivo != "Thumbs.db") {
            // Executa os comandos de manipulação nas imagens
			copy($pasta.$arquivo, $pasta_evento.$arquivo);
			unlink($pasta.$arquivo); // apaga as fotos com marca da pasta TEMP
        } // fim do if de processamento das fotos
    } // fim do while de leitura das pasta
}

Esse código está fazendo o seguinte:

- Bota as marcas

- Copia para a pasta do evento as fotos marcadas

- Copia as fotos originais pra pasta "originais"

- Apaga as fotos originais

 

Está faltando implementar:

- Criar as miniaturas com marca

- Copiar as miniaturas para a pasta 'thumbs' dentro da pasta do evento

- Excluir as miniaturas da pasta 'temp'

 

Comandos da classe de manipulação de imagens:

$ImgHandler     = new ImgHandler();
$foto 		= $ImgHandler->saveImg($pasta."/".$arquivo);
$marcada 	= $ImgHandler->insertLogo($foto); // insere a logomarca na foto
$miniatura      = $ImgHandler->createThumb($foto); // cria miniatura da foto

Esses comando assim juntos irão botar a marca nas fotos e criar as suas miniaturas, utilizando nomes randomicos (as miniaturas terão "_thumb" no final do nome) e sendo salvos na pasta TEMP

Acho que é possível fazer tudo isso utilizando apenas um único WHILE, não?

 

Praticamente só falta isso pra fazer a parte administrativa do sistema, pois o resto é só cadastro de banco de dados e começar a substituir as coisas aí no código.

 

Aguardo ajuda! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica do algoritmo:

Para (cada foto da pasta /temp/) faça:
    1. Inicie a classe de manipulação de imagens
    2. Carregue a imagem da pasta /temp/
    3. Insira a marca dágua/logo na imagem
    4. Salve a foto na pasta eventos
    5. Redimensione a foto
    6. Salve a foto redimensionada (thumb) na pasta eventos/thumb
    7. Salve a foto original na pasta originais
    8. Delete a foto da pasta /temp/
FimPara
Ou seja, dentro do while você (teoricamente) não teria nenhum if... Apenas faria o passo-a-passo e no fim deletaria a imagem da pasta temp. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um pequeno problema com essa classe de manipulação de imagens: Ela não exporta para uma pasta definida.

Por isso estou utilizando o comando de copiar e deletar, pois seria uma forma de burlar essa parte não implementada.

 

Analisando o seu algoritimo, o mais correto seria algo assim:

Para (cada foto da pasta /temp/) faça:
    1. Inicie a classe de manipulação de imagens
    2. Carregue a imagem da pasta /temp/
    3. Crie uma cópia da foto com a marca na pasta /TEMP/ (saída do arquivo: 2197107490712309712.jpg)
    4. Copie a foto para a pasta do EVENTO
    5. Crie a miniatura da foto com marca na pasta /TEMP/ (saída do arquivo: 2197107490712309712_thumb.jpg)
    6. Copie todos os arquivos que possuir "_thumb" no nome do arquivo para a pasta "/evento/thumbs/"
    7. Copie a foto original para a pasta "/originais/"
    8. Delete todos os arquivos da pasta "/temp/"
FimPara

Veja só, ao executar o comando de inserir a marca e gerar as miniaturas, a pasta /TEMP/ terá 3 cópias da mesma foto, onde elas são:

- original

- marcada

- miniatura

 

Se a gente usar o comando de deletar o arquivo original, só irão sobrar as fotos marcadas e as miniaturas, depois disso basta varrer a pasta /TEMP/ para copiar as imagens que tiverem no nome do arquivo "_thumb" para a devida pasta e excluí-las da pasta "/TEMP/", sobrando apenas as fotos marcadas, onde a gente poderia varrer novamente para copiá-las para a pasta de eventos.

 

Veja como ficou mais ou menos o código que eu fiz agora aqui:

$pasta = "./temp/"; // caminho da pasta temporária
$pasta_originais = "./originais/20090801_01/";
$pasta_evento = "./eventos/20090801_01/"; // caminho da pasta das fotos marcadas
$pasta_thumbs = "./eventos/20090801_01/thumbs/"; // caminho da pasta das miniaturas

if ($handle = opendir($pasta)) {
    while (false !== ($arquivo = readdir($handle))) { // gerar fotos com barras e miniaturas dentro da pasta TEMP
        if ($arquivo != "." && $arquivo != ".." && $arquivo != "Thumbs.db") {
            // Executa os comandos de manipulação nas imagens
			$ImgHandler = new ImgHandler();
			$foto 		= $ImgHandler->saveImg($pasta."/".$arquivo);
			$ImgHandler->insertLogo($foto); // insere a logomarca na foto
			//copy($pasta.$foto, $pasta_evento.substr($foto, 7)); // formata o nome do arquivo retirando a pasta do caminho e copia para a pasta do EVENTO
			$ImgHandler->createThumb($foto); // cria miniatura da foto
			//copy($pasta.$foto, $pasta_thumbs.substr($foto, 7)); // formata o nome do arquivo retirando a pasta do caminho e copia para a pasta THUMBS
			copy($pasta.$arquivo, $pasta_originais.$arquivo); // copia as imagens originais para a pasta 'originais'
			unlink($pasta.$arquivo); // apaga a foto original das pasta TEMP
        } // fim do if de processamento das fotos
    } // fim do while de leitura das pasta

Com esse código ele está fazendo o processamento das fotos botando a marca e criando as miniaturas. Copia as fotos originais pra pasta /ORIGINAIS/ e deleta da pasta /TEMP/. Agora só falta fazer o restante das cópias das imagens (marcadas e miniaturas) para as suas devidas pastas.

 

Pensei tambem em tentar capturar o nome do arquivo processado e criar uma variavel $miniatura e tentar inserir o "_thumb" no nome do arquivo. Po exemplo:

Arquivo: 1203891407120931.jpg
Usar comandos de explode e substrg para capturar "1203891407120931" e inserir "_thumb" e dps colocar de volta a extensão do arquivo e associar o nome final a variável $miniatura, ficando assim:
$miniatura = "1203891407120931_thumb.jpg"

Aguardo opniões!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o problema e fazer o código todo funcionar!!!

 

Ele está funcionando e realizado as devidas tarefas de manipular as imagens, copiá-las e excluí-las. Só que está exibindo um erro cada vez que processa as imagens. Mas isso não está interferindo em nada no funcionamento. Poderiam me ajudar a resolver isso?

 

Enviei um arquivo zip com 3 fotos dentro e deu a seguinte saída:

Arquivo enviado!
O arquivo 1249449869.zip foi movido para a pasta 'TEMP'.
1249449869.zip
Arquivo extraido

Strict Standards: Only variables should be passed by reference in C:\Arquivos de programas\EasyPHP3.1\www\teste\zip\class.imghandler.php on line 251

Strict Standards: Only variables should be passed by reference in C:\Arquivos de programas\EasyPHP3.1\www\teste\zip\class.imghandler.php on line 251

Strict Standards: Only variables should be passed by reference in C:\Arquivos de programas\EasyPHP3.1\www\teste\zip\class.imghandler.php on line 251

 

 

ARQUIVOS

 

form_upload.php

<form name="upload" id="upload" action="processar.php" method="post" enctype="multipart/form-data">
	<input type="file" name="arquivo" />
	<input type="submit" value="Enviar" />
</form>

processar.php

<?php
require('class.imghandler.php');

// PASSO 1 - Receber o arquivo enviado pelo form_upload.php
	// Lista de tipos de arquivos permitidos
	$tiposPermitidos= array('application/zip');
	// Tamanho máximo (em bytes)
	$tamanhoPermitido = 8388608; // 8 MB

	// O nome original do arquivo no computador do usuário
	$arqName = $_FILES['arquivo']['name'];
	// O tipo mime do arquivo. Um exemplo pode ser "image/gif"
	$arqType = $_FILES['arquivo']['type'];
	// O tamanho, em bytes, do arquivo
	$arqSize = $_FILES['arquivo']['size'];
	// O nome temporário do arquivo, como foi guardado no servidor
	$arqTemp = $_FILES['arquivo']['tmp_name'];
	// O código de erro associado a este upload de arquivo
	$arqError = $_FILES['arquivo']['error'];

	if ($arqError == 0) {
        // Verifica o tipo de arquivo enviado
		if (array_search($arqType, $tiposPermitidos) === false) {
			echo 'O tipo de arquivo enviado é inválido!';
		// Verifica o tamanho do arquivo enviado
		} else if ($arqSize > $tamanhoPermitido) {
			echo 'O tamanho do arquivo enviado é maior que o limite!';
		// Não houveram erros, move o arquivo
		} else {
			$pasta = './temp/';
			// Pega a extensão do arquivo enviado
			$extensao = explode(".", $arqName);
			$extensao = end($extensao);
			$extensao = strtolower($extensao);
			
			// Define o novo nome do arquivo usando um UNIX TIMESTAMP
			$arqName = time() . '.' . $extensao; // Nome do arquivo com a extensão
			
			$upload = move_uploaded_file($arqTemp, $pasta.$arqName); // Move o arquivo enviado para a pasta TEMP
			echo "Arquivo enviado!<br>O arquivo ".$arqName." foi movido para a pasta 'TEMP'.<br>";
		}
	}

// PASSO 2 - Extrair os arquivos na pasta TEMP
function extrair($arqName, $destino) {

    $zip = new ZipArchive; // cria o objeto ZIP
    $res = $zip->open($arqName); // abre o arquivo ZIP para trabalhar com ele
    if ($res === TRUE) {
        $zip->extractTo($destino); // extrai o arquivo no destino escolhido
        $zip->close(); // fecha o arquivo ZIP
        return TRUE;
    } else {
        return FALSE;
    }

} // fim da função
	
echo $arqName;
$dest = "./temp/";
if (extrair($dest.$arqName,$dest)){ // Tenta extrair o arquivo na pasta destino "TEMP"
	echo "<br>Arquivo extraido<br>";
} else { 
	echo "<br>Erro ao extrair o arquivo!<br>";
}

unlink($dest.$arqName); // Apaga o arquivo ZIP da pasta TEMP

// PASS0 3 - Processar todas as fotos da pasta TEMP utilizando a classe de manipulação de imagens
$pasta = "./temp/"; // caminho da pasta temporária
$pasta_originais = "./originais/20090801_01/";
$pasta_evento = "./eventos/20090801_01/"; // caminho da pasta das fotos marcadas
$pasta_thumbs = "./eventos/20090801_01/thumbs/"; // caminho da pasta das miniaturas

if ($handle = opendir($pasta)) {
    while (false !== ($arquivo = readdir($handle))) { // varre a pasta /temp/ e executa os comandos abaixo
        if ($arquivo != "." && $arquivo != ".." && $arquivo != "Thumbs.db") {
            // Executa os comandos de manipulação nas imagens
			$ImgHandler = new ImgHandler(); // cria o objeto da classe
			$foto = $ImgHandler->saveImg($pasta."/".$arquivo); 
			$ImgHandler->insertLogo($foto); // insere a logomarca na foto
			$ImgHandler->createThumb($foto); // cria miniatura da foto
			
			$marcada = substr($foto, 7); // pega o nome da foto com marca
			$miniatura = substr($foto,7,32)."_thumb.jpg"; // pega o nome da foto miniatura
			
			copy($pasta.$marcada, $pasta_evento.$marcada); // formata o nome do arquivo retirando a pasta do caminho e copia para a pasta do EVENTO
			copy($pasta.$miniatura, $pasta_thumbs.$miniatura); // formata o nome do arquivo retirando a pasta do caminho e copia para a pasta THUMBS
			copy($pasta.$arquivo, $pasta_originais.$arquivo); // copia as imagens originais para a pasta 'originais'
			
			unlink($pasta.$miniatura); // apaga as miniaturas da pasta /TEMP/
			unlink($pasta.$marcada); // apaga as fotos marcadas da pasta /TEMP/
			unlink($pasta.$arquivo); // apaga a foto original das pasta TEMP
        } // fim do if de processamento das fotos
    } // fim do while de leitura das pasta

	closedir($handle);
}
?>

class.imghandler.php

<?php

/**
 * Arquivo com a classe \c ImgHandler.
 * @file class.ImgHandler.php
*/

/*
 * Exemplo de uso:
 *
 * $img = 'foto.jpg'; // foto que deverá ser salva/redimensionada
 * $ImgHandler = new ImgHandler();
 * $foto = $ImgHandler->saveImg( $img );
 * $ImgHandler->createThumb( $foto );
 * $ImgHandler->insertLogo( $foto );
*/




/* Definição de constantes que poderão ser usadas na chamada ao método insertLogo() */
defined( 'IMGHANDLER_LOGO_TOP_LEFT' ) || define( 'IMGHANDLER_LOGO_TOP_LEFT', 1 );
defined( 'IMGHANDLER_LOGO_TOP_RIGHT' ) || define( 'IMGHANDLER_LOGO_TOP_RIGHT', 2 );
defined( 'IMGHANDLER_LOGO_TOP_CENTER' ) || define( 'IMGHANDLER_LOGO_TOP_CENTER', 3 );
defined( 'IMGHANDLER_LOGO_BOTTOM_LEFT' ) || define( 'IMGHANDLER_LOGO_BOTTOM_LEFT', 4 );
defined( 'IMGHANDLER_LOGO_BOTTOM_RIGHT' ) || define( 'IMGHANDLER_LOGO_BOTTOM_RIGHT', 5 );
defined( 'IMGHANDLER_LOGO_BOTTOM_CENTER' ) || define( 'IMGHANDLER_LOGO_BOTTOM_CENTER', 6 );
defined( 'IMGHANDLER_LOGO_MIDDLE_LEFT' ) || define( 'IMGHANDLER_LOGO_MIDDLE_LEFT', 7 );
defined( 'IMGHANDLER_LOGO_MIDDLE_RIGHT' ) || define( 'IMGHANDLER_LOGO_MIDDLE_RIGHT', 8 );
defined( 'IMGHANDLER_LOGO_MIDDLE_CENTER' ) || define( 'IMGHANDLER_LOGO_MIDDLE_CENTER', 9 );



/**
 * A classe \c ImgHandler é responsável por copiar imagens (de um diretório ou de um formulário, por meio de envio por método POST), redimensioná-las e inserir a logomarca (marca d'água).
 * @class ImgHandler
 * @author Roberto Beraldo Chaiben (rbchaiben [at] gmail [dot] com)
 * @version 1.1
 * @see http://www.php.net/manual/pt_BR/book.image.php
 * @see http://www.php.net/manual/pt_BR/features.file-upload.php
*/
class ImgHandler
{
	
	
	/*=============================================*/
	/*====     PROPRIEDADES DA CLASSE     =========*/
	/*=============================================*/
	
	
	/**
	 * Largura máxima das imagens, em pixels.
	 * @private max_img_width
	*/
	private $max_img_width = 600;
	
	
	/**
	 * Altura máxima das imagens, em pixels.
	 * @private max_img_height
	*/
	private $max_img_height = 450;
	
	
	/**
	 * Largura máxima das miniaturas (\em thumbnails), em pixels.
	 * @private max_thumb_width
	*/
	private $max_thumb_width = 100;
	
	
	/**
	 * Altura máxima das miniaturas (\em thumbnails), em pixels.
	 * @private max_thumb_height
	*/
	private $max_thumb_height = 75;
	
	
	/**
	 * Prefixo que diferencia uma miniatura (\em thumbnail) de sua imagem original.
	 * @private thumb_prefix
	*/
	private $thumb_prefix = '';
	
	
	/**
	 * Sufixo que diferencia uma miniatura (\em thumbnail) de sua imagem original.
	 * @private thumb_sufix
	*/
	private $thumb_sufix = '_thumb';

	
	
	/**
	 * Qualidade final da imagem (inteiro entre 0 e 100).
	 * @note Esse valor só é usado em imagens JPEG.
	 * @private img_quality
	*/
	private $img_quality = 80;
	
	
	/**
	 * Qualidade final da miniatura (\e thumbnail) (inteiro entre 0 e 100).
	 * @note Esse valor só é usado em imagens JPEG.
	 * @private thumb_quality
	*/
	private $thumb_quality = 80;
	
	
	/**
	 * Caminho para o arquivo da logomarca (marca d'água) que deve ser inserida nas imagens.
	 * @private logo_file
	*/
	private $logo_file = 'agito.png';
	
	
	
	
	
	
	
	
	/*==============================================*/
	/*=========     MÉTODOS DA CLASSE     ==========*/
	/*==============================================*/
	
	
	
	
		
	/**
	 * Salva a imagem, redimensionando-a, se ultrapassar as dimensões máximas permitidas.
	 * @param filename Caminho para a imagem que deve ser salva.
	 * @return Retorna o nome da imagem salva.
	 * @note O nome final do arquivo da iamgem é gerado dinamicamente, a fim de evitar arquivos com nomes iguais e, consequentemente, sobreescrita de arquivos diferentes.
	*/
	public function saveImg( $filename )
	{
		list( $largura, $altura ) = getimagesize( $filename );
		
		// se as dimensões da imagem forem maiores que as permitidas, faz o redimensionamento dela.
		if ( $largura > $this->max_img_width || $altura > $this->max_img_height )
		{
			return $this->ResizeImg( $filename );
		}
		
		// gera um nome para a imagem.
		$novo_nome = $this->randName( $filename );
		
		copy( $filename, $novo_nome );
		
		return $novo_nome;
	}
	/*---------------------------------------------------*/
	
	
	
	/**
	 * Redimensiona uma imagem e a salva.
	 * @param filename Imagem a ser redimensionada.
	 * @return Retorna o nome da imagem salva.
	*/
	protected function ResizeImg( $filename )
	{
		
		list( $largura, $altura ) = getimagesize( $filename );
		$img_type = $this->getImgType( $filename );
		
		// define largura e altura conforma o tamanho da imagem,
		// a fim de manter a proporção entre as dimensões
		
		if ( $largura > $altura)
		{
			$nova_largura = $this->max_img_width;
			$nova_altura = round( ($nova_largura / $largura) * $altura );
		}
		elseif ( $altura > $largura )
		{
			$nova_altura = $this->max_img_height;
			$nova_largura = round( ($nova_altura / $altura) * $largura );
		}
		else
		{
			$nova_altura = $nova_largura = $this->max_img_width;
		}
		
		$src_img = call_user_func( 'imagecreatefrom' . $img_type, $filename );
		$dst_img = imagecreatetruecolor( $nova_largura, $nova_altura );
		
		
		imagecopyresampled( $dst_img, $src_img, 0, 0, 0, 0, $nova_largura, $nova_altura, $largura, $altura );
		
		$nome_img = $this->randName( $filename );
		
		// verifica se é JPEG
		// Se for, adiciona o terceiro parâmetro (img_quality)
		if ( $img_type == 'jpeg' )
		{
			imagejpeg( $dst_img, $nome_img, $this->img_quality );
		}
		else
		{
			call_user_func( 'image' . $img_type, $dst_img, $nome_img );
		}
		
		
		imagedestroy( $src_img );
		imagedestroy( $dst_img );
		
		return $nome_img;
	}
	/*------------------------------------------------------*/
	
	
	
	/**
	 * Gera \em thumbnail de uma imagem.
	 * @param filename Imagem da qual deve ser gerado o \em thumbnail.
	 * @return Retorna o nome final do \em thumbnail.
	*/
	public function createThumb( $filename )
	{
		list( $largura, $altura ) = getimagesize( $filename );
		$img_type = $this->getImgType( $filename );
		
		// define largura e altura conforma o tamanho da imagem,
		// a fim de manter a proporção entre as dimensões
		
		if ( $largura > $altura)
		{
			$nova_largura = $this->max_thumb_width;
			$nova_altura = round( ($nova_largura / $largura) * $altura );
		}
		elseif ( $altura > $largura )
		{
			$nova_altura = $this->max_thumb_height;
			$nova_largura = round( ($nova_altura / $altura) * $largura );
		}
		else
		{
			$nova_altura = $nova_largura = $this->max_thumb_width;
		}
		
		$src_img = call_user_func( 'imagecreatefrom' . $img_type, $filename );
		$dst_img = imagecreatetruecolor( $nova_largura, $nova_altura );

		
		
		imagecopyresampled( $dst_img, $src_img, 0, 0, 0, 0, $nova_largura, $nova_altura, $largura, $altura );
		
		$ext = end( explode( '.', $filename ) );
		$nome_arr = pathinfo( $filename );
		$nome_img = dirname( $filename) . DIRECTORY_SEPARATOR . $this->thumb_prefix . $nome_arr['filename'] . $this->thumb_sufix . '.' . $ext;
		
		// verifica se é JPEG
		// Se for, adiciona o terceiro parâmetro (thumb_quality)
		if ( $img_type == 'jpeg' )
		{
			imagejpeg( $dst_img, $nome_img, $this->thumb_quality );
		}
		else
		{
			call_user_func( 'image' . $img_type, $dst_img, $nome_img );
		}
		
		imagedestroy( $src_img );
		imagedestroy( $dst_img );
		
		return $nome_img;
	}
	/*----------------------------------------------------------*/
	
	
	
	/**
	 * Gera um novo nome para a imagem, evitando que haja arquivos com os mesmos nomes.
	 * @param filename Nome original do arquivo.
	 * @return Retorna o novo nome do arquivo.
	 * @note Se for passado um caminho completo para o método (com nomes de diretórios), o retorno conterá o caminho completo também, alterando apenas o nome do arquivo, sem modificar os nomes dos diretórios.
	*/
	protected function randName( $filename )
	{
		$tipo = getimagesize( $filename );
		$tipo = $tipo[2];
		
		switch ( $tipo )
		{
			case 1:
				$ext = 'gif';
				break;
			case 2:
				$ext = 'jpg';
				break;
			case 3:
				$ext = 'png';
				break;
			default:
				$ext = false;
		}
		
		if ( !$ext )
		{
			return false;
		}
		
		$novo_nome = strtolower( str_replace( ".", "", uniqid( time(), true) ) );
		$nome = ( $novo_nome . "." . $ext );
		
		return dirname( $filename ) . DIRECTORY_SEPARATOR . $nome;
	}
	/*---------------------------------------------*/
	
	
	
	/**
	 * Insere logomarca (marca d'água) numa imagem.
	 * @param filename Caminho para o arquivo da imagem na qual deve ser inserida a logomarca (marca d'água).
	 * @param logoBorder Distância que a logomarca (marca d'água) ficará da borda da imagem, em pixels. Por padrão, essa distância é de 5 pixels.
	 * @param logoPosition Posição em que deverá ser inserida a logomarca (marca d'água). Pode ser um dos seguintes valores (constantes):
	 * 	@li IMGHANDLER_LOGO_TOP_LEFT -> Insere no topo esquerdo;
	 * 	@li IMGHANDLER_LOGO_TOP_RIGHT -> Insere no topo direito;
	 * 	@li IMGHANDLER_LOGO_TOP_CENTER -> Insere no topo central;
	 * 	@li IMGHANDLER_LOGO_BOTTOM_LEFT -> Insere na base esquerda;
	 * 	@li IMGHANDLER_LOGO_BOTTOM_RIGHT -> Insere na base direita;
	 * 	@li IMGHANDLER_LOGO_BOTTOM_CENTER -> Insere na base central;
	 * 	@li IMGHANDLER_LOGO_MIDDLE_LEFT -> Insere na pate central vertical, à esquerda;
	 * 	@li IMGHANDLER_LOGO_MIDDLE_RIGHT -> Insere na pate central vertical, à direita;
	 * 	@li IMGHANDLER_LOGO_MIDDLE_CENTER -> Insere na pate central vertical, centrailzado horizontalmente;
	 *
	 *
	 * Por padrão, a logomarca é inserida na base direita.
	 *
	 * @return Retorna TRUE em caso de sucesso e FALSE em caso de erro.
	*/
	public function insertLogo( $filename, $logoBorder = 0, $logoPosition = NULL )
	{
		if ( !file_exists( $filename ) )
		{
			echo "Arquivo \"" . $filename . "\" não encontrado";
			return false;
		}
		
		if ( !is_int( $logoBorder ) || $logoBorder < 0 )
		{
			$logoBorder = 0;
		}
		
		if ( $logoPosition == NULL )
		{
			// assume o valor padrão
			$logoPosition = IMGHANDLER_LOGO_BOTTOM_RIGHT;
		}
		
		$logoBorder++;
		
		$logo_type = $this->getImgType( $this->logo_file );
		$img_type = $this->getImgType( $filename );
		
		if ( !$logo_type || !$img_type )
		{
			return false;
		}
		
		$img = call_user_func( 'imagecreatefrom' . $img_type, $filename );
		$logo = call_user_func( 'imagecreatefrom' . $logo_type, $this->logo_file );
		
		// dimensões das imagens
		$img_size = array( imagesx( $img ), imagesy( $img ) );
		$logo_size = array( imagesx( $logo ), imagesy( $logo ) );
		
		// ponto onde deverá ser inserida a logomarca
		switch ( $logoPosition )
		{
			case IMGHANDLER_LOGO_TOP_LEFT:
				$x = $logoBorder;
				$y = $logoBorder;
				break;
			
			case IMGHANDLER_LOGO_TOP_RIGHT:
				$x = $img_size[0] - ( $logo_size[0] + $logoBorder );
				$y = $logoBorder;
				break;
			
			case IMGHANDLER_LOGO_TOP_CENTER:
				$x = ( $img_size[0] / 2 - ( $logo_size[0] / 2 ) ) - $logoBorder;
				$y = $logoBorder;
				break;
			
			case IMGHANDLER_LOGO_BOTTOM_LEFT:
				$x = $logoBorder;
				$y = $img_size[1] - ( $logo_size[1] + $logoBorder );
				break;
			
			case IMGHANDLER_LOGO_BOTTOM_RIGHT:
				$x = $img_size[0] - ( $logo_size[0] + $logoBorder );
				$y = $img_size[1] - ( $logo_size[1] + $logoBorder );
				break;
			
			case IMGHANDLER_LOGO_BOTTOM_CENTER:
				$x = ( $img_size[0] / 2 - ( $logo_size[0] / 2 ) ) - $logoBorder;
				$y = $img_size[1] - ( $logo_size[1] + $logoBorder );
				break;
			
			case IMGHANDLER_LOGO_MIDDLE_LEFT:
				$x = $logoBorder;
				$y = ( $img_size[1] / 2 - ( $logo_size[1] / 2 ) ) - $logoBorder;
				break;
			
			case IMGHANDLER_LOGO_MIDDLE_RIGHT:
				$x = $img_size[0] - ( $logo_size[0] + $logoBorder );
				$y = ( $img_size[1] / 2 - ( $logo_size[1] / 2 ) ) - $logoBorder;
				break;
			
			case IMGHANDLER_LOGO_MIDDLE_CENTER:
				$x = ( $img_size[0] / 2 - ( $logo_size[0] / 2 ) ) - $logoBorder;
				$y = ( $img_size[1] / 2 - ( $logo_size[1] / 2 ) ) - $logoBorder;
				break;
			
			default:
				$x = $y = false;
			
		}
		
		
		if ( !$x || !$y )
		{
			return false;
		}
		
		$logo_point = array( $x, $y );
		
		imagecopy( $img, $logo, $logo_point[0], $logo_point[1], 0, 0, $logo_size[0], $logo_size[1] );
		
		// verifica se é JPEG
		// Se for, adiciona o terceiro parâmetro (thumb_quality)
		if ( $img_type == 'jpeg' )
		{
			imagejpeg( $img, $filename, $this->img_quality );
		}
		else
		{
			call_user_func( 'image' . $img_type, $img, $filename );
		}
		
		
		imagedestroy( $logo );
		imagedestroy( $img );
		
		return true;
	}
	/*----------------------*/
	
	
	
	/**
	 * Identifica o tipo de uma imagem.
	 * @param filename Caminho da imagem.
	 * @return Retorna o tipo da imagem (gif, jpeg ou png). 
	*/
	protected function getImgType( $filename )
	{
		$type = getimagesize( $filename );
		
		if ( $type == FALSE || !is_array( $type ) )
		{
			return false;
		}
		
		switch ( $type[2] )
		{
			case 1: // GIF
				$img_type = 'gif';
				break;
			case 2: // JPEG
				$img_type = 'jpeg';
				break;
			case 3: // PNG
				$img_type = 'png';
				break;
			default:
				$img_type = false;
		}
		
		return $img_type;
	}
	/*-----------------------------*/
	
	
	
	/**
	 * Modifica as dimensões máximas das iamgens.
	 * @param width Largura máxima das imagens.
	 * @param height Altgura máxima das imagens.
	 
	*/
	public function setMaxImgSize( $width, $height )
	{
		if ( is_integer( $width ) && is_integer( $height ) )
		{
			$this->max_img_width = $width;
			$this->max_img_height = $height;
		}
	}
	/*------------------------*/
	
	
	
	/**
	 * Modifica as dimensões máximas das miniaturas (thumbnails).
	 * @param width Largura máxima das miniaturas (thumbnails).
	 * @param height Altgura máxima das miniaturas (thumbnails).
	 
	*/
	public function setMaxThumbSize( $width, $height )
	{
		if ( is_integer( $width ) && is_integer( $height ) )
		{
			$this->max_thumb_width = $width;
			$this->max_thumb_height = $height;
		}
	}
	/*------------------------*/
	
	
	
	/**
	 * Determina o prefixo das miniaturas (thumbnails)
	 * @param prefix Prefixo das miniaturas (thumbnails)
	*/
	public function setThumbPrefix( $prefix )
	{
		$this->thumb_prefix = $prefix;
	}
	/*----------------------------*/
	
	
	
	/**
	 * Determina o sufixo das miniaturas (thumbnails)
	 * @param sufix Sufixo das miniaturas (thumbnails)
	*/
	public function setThumbSufix( $sufix )
	{
		$this->thumb_sufix = $sufix;
	}
	/*----------------------------*/
	
	
	
	
	/**
	 * Define a qualidade final da imagem.
	 * @note Esse valor só é usado em imagens JPEG.
	 * @param img_quality Qualidade final da imagem. Deve ser um inteiro entre 0 e 100.
	*/
	public function setImgQuality( $img_quality )
	{
		if ( !is_int( $img_quality ) || $img_quality < 0 || $img_quality > 100 )
		{
			return false;
		}
		
		$this->img_quality = $img_quality;
	}
	/*-------------------------*/
	
	
	
	/**
	 * Define a qualidade final da miniatura (\e thumbnail).
	 * @note Esse valor só é usado em imagens JPEG.
	 * @param thumb_quality Qualidade final da miniatura (\e thumbnail). Deve ser um inteiro entre 0 e 100.
	*/
	public function setThumbQuality( $thumb_quality )
	{
		if ( !is_int( $thumb_quality ) || $thumb_quality < 0 || $thumb_quality > 100 )
		{
			return false;
		}
		
		$this->thumb_quality = $thumb_quality;
	}
	/*-------------------------*/
	
	
	
	
	/**
	 * Altera o caminho do arquivo da logomarca (marca d'água) que deve sr inserida nas imagens.
	 * @param logo_file Caminho para o arquivo da logomarca (marca d'água).
	*/
	public function setLogoFile( $logo_file )
	{
		if ( !file_exists( $logo_file ) )
		{
			echo "Arquivo \"" . $logo_file . "\" não encontrado. Retornando ao valor padrão.";
		}
		else
		{
			$this->logo_file = $logo_file;
		}
	}
	/*---------------------*/
	

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui retirar o erro!

 

Eu fiz o seguinte, fui na linha 251:

$ext = end( explode('.', $filename));

e substitui pelas 2 linhas abaixo:

$ext = explode('.', $filename);
$ext = end($ext);

Agora só falta:

- implementar a parte do BD;

- Criar as páginas de criação de um evento (galeria) e suas devidas pastas com cadastro no BD das informações;

- Pagina de visualização do evento (galeria);

 

Logo postarei aqui os códigos ou qualquer dúvida minha! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

To aprendendo MUITO com esse sistema! Estou bem empolgado! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

A parte administrativa do sistema já está pronta!

Estou partindo agora para a parte visual da galeria de fotos.

 

Estou planejando fazer a galeria de fotos utilizando frames, sendo um para as thumbs (miniaturas) e outro pra exibir a foto grande.

 

Gostaria de saber se tem como fazer uma leitura das fotos da pasta THUMBS e fazer uma listagem + paginação no PHP puro??

(OBSERVAÇÃO: Não está sendo utilizado MYSQL)

 

Quero algo do tipo que ele crie uma tabela no HTML com 2 colunas e vá inserindo as miniaturas dentro de cada célula, exibindo apenas 50 fotos por página. Quero que tenha o sistema de controle de páginas tanto na parte superior da tabela, como no final, de preferência só os números das páginas com os seus devidos links.

 

Estou tentando da seguinte maneira:

<table cellpadding=0 bgcolor='#4E4D4D' cellspacing=4 border=0 width=200 height=100%>
	<tr>
<?php
$i = 0;
$pasta_evento = "../../eventos/maikai_show_bar/20090802/";
$pasta_thumbs = "../../eventos/maikai_show_bar/20090802/thumbs/";

if ($handle = opendir($pasta_thumbs)) {
        while (false !== ($file = readdir($handle))) {
        if (strtolower(substr($file, -4, 4)) == '.jpg' || strtolower(substr($file, -5, 5)) == '.jpeg') {  
        echo '<td>';
		$arquivo 	= substr($file, 0, 32);
		$ext 		= substr($file, -4, 4);
		$foto = $arquivo.$ext;
        echo '<a href="'.$pasta_evento.$foto.'" border="0" target="_grande">';
        echo '<img src="'.$pasta_thumbs.$file.'" border="1" style="border:1px #F90;"/>';
		echo '</a>';
        echo '</td>';
		$i++;		
		if ($i % 2 == 0){
			echo "</tr><tr>";
        	} // fim do IF $i
		} // fim do IF da extensão JPG
	} // fim do while
closedir($handle);
} // fim do IF de verificação da pasta
?>
	</tr>
</table>
<?php

$file = array(); 
sort($file); // organizar em ordem crescente

echo $file;

$nElements = 50;  // numero de elementos a ser exibido por página

if(!$pagina = $_GET["pagina"]) {
	$pagina = 1; 
}

$paginaA = $pagina * $nElements; 

for($i = 0; $i < $nElements; $i++) { 
$z = $i + $paginaA; 
echo $z."<br/>"; 
} 

$nPaginas = ceil(count($file) / $nElements); 

for($i = 0; $i < $nPaginas; $i++) { 
$z = $i + 1; 
	if($i != $pagina) {
		echo "<a href='".$_SERVER["PHP_SELF"]."?pagina=".$i."'>".$z."</a>"; 
	} else {
		echo "$z"; 
	}
}
?>

Está fazendo a listagem das miniaturas de forma correta, só que está dando erros:

Notice: Undefined index: pagina in C:\Arquivos de programas\EasyPHP3.1\www\teste\zip\admin\galeria\paginacao.php on line 39
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

O erro é nesta linha:

if(!$pagina = $_GET["pagina"]) {

Como resolver? Creio também que não seja só esse o erro neste script, pois está aparecendo esse monte de número aí embaixo, que era pra ser as páginas. Nesta pasta tem 56 arquivos, sendo assim, era pra ter 2 páginas apenas e não esse monte de número.

 

No aguardo da ajuda! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não li o seu código, mas o erro que está aparecendo é porque não está da forma correta. Veja

 

if(!$pagina = $_GET["pagina"]) {

Correto

 

if($pagina != $_GET["pagina"]) {

(OBSERVAÇÃO: Não está sendo utilizado MYSQL)

Tem algum motivo específico para não estar utilizando MYSQL?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use frames para isso. Tenha piedade dos visitantes. Fica péssimo.

 

 

É possível listar fotos de direótio e fqazer paginação

scandir() gera um array com os arquivos. Depois siga este tutorial:

http://forum.imasters.com.br/index.php?/topic/140526-fazendo-paginacao/

 

 

 

Além do erro mostrado pelo matias_rezende, há outro erro: o "undefined index" é porque "pagina" não existe em $_GET. Use isset() num if

 

 

if ( isset( $_GET['pagina'] ) )
{
   ...
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos Eduardo (matias),

 

não utilizei MySQL para diminuir o uso do processamento do servidor, pois meu site chega a ter uns 300 visitantes online simultâneamente, carregando as galerias de fotos, onde o servidor iria processar tanto o PHP como o MYSQL. Me corrija se estiver errado.

 

Quanto ao código, fiz a alteração e continua sem fazer a devida paginação.

 

---------------------

 

Beraldo,

 

eu estou utilizando esse código do link para fazer a paginação dos arquivo, mas está com esses erros e não faz a paginação dos mesmos.

 

Quanto aos frames, o que você sugere então? Estou querendo utilizar frames pra poder separar a página com miniaturas (ficará no lado esquerdo) das páginas que irão exibir as fotos grandes (lado direito).

 

Veja como é no site atual. (só que lá é HTML puro) Por isso estou desenvolvendo essa galeria em PHP; exatamente pra simplificar a minha vida na hora das postagens das fotos.

 

Poderia me dar uma ajuda de como eu posso implementar o scandir() neste meu código?

 

Valeu a ajuda dos 2! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

não utilizei MySQL para diminuir o uso do processamento do servidor,

Normalmente nos provedores o servidor do Mysql e o servidor do PHP estão em computadores diferentes. Então na verdade ao invés de sobrecarregar, iria dividir o processamento. Por isto sugiro que pense em usar Mysql.

 

Sobre os frames, eu sugiro fazer com Ajax.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho server próprio e as 2 aplicações estão no mesmo server.

 

Possivelmente eu poderei implementar isso em AJAX futuramente, mas a princípio vou fazer em frames mesmo, pois estou com uma certa pressa pra terminar isso.

 

Consegui desenvolver o código aqui baseado no tutorial, mas está acontecendo algo estranho.

<?php
$pasta = "../../eventos/maikai_show_bar/20090802/thumbs/";

$handle = opendir($pasta); // abre o manipulador da pasta
while (false !== ($file = readdir($handle))) { // varre a pasta em busca de arquivos
	if (strtolower(substr($file, -4, 4)) == '.jpg' || strtolower(substr($file, -5, 5)) == '.jpeg') {
    	$files[] = $file; // adiciona os arquivos que forem imagens jpg no array
	}
}
closedir($handle); // fecha o manipulador da pasta

sort($files); // ordena os arquivos no array

$nElements = 5; // número de miniaturas por página

$pagina = 0;
if(isset($_GET["pagina"])) {
        $pagina = $_GET["pagina"];
}

$paginaA = $pagina * $nElements; //

for($i = 0; $i < $nElements; $i++) {
	$z = $i + $paginaA;
	echo $files[$z]."<br/>";

	$nPaginas = ceil(count($files) / $nElements);

	for($i = 0; $i < $nPaginas; $i++) {
		$z = $i + 1;
			if($i != $pagina){
			echo "<a href='" . $_SERVER["PHP_SELF"] . "?pagina=" . $i . "'>" . $z . "</a> ";
			}else{
			echo $z . " ";
			}
	}
}
?>

Nesta pasta, eu tenho 56 fotos. Quando eu rodo esse arquivo, ele está exibindo apenas o nome de 1 arquivo e apenas 12 páginas. (teoricamente era pra exibir 5 nomes e ter 2 páginas), mas se eu alterar a variável $nElements para 50 (que é o que eu quero realmente), ele entra em um loop infinito exibindo apenas 1 nome de arquivo, mas exibe o número certo de páginas, que seria 2!

Compartilhar este post


Link para o post
Compartilhar em outros sites

dê um print_r() em $files e veja se ao array está coreto

 

 

Uma coisa bem chata do frame é que seus visitantes não poderão passar o link de uma imagem. a URL será sempre a mesma

 

Até dá para passar link específico, mas poucos sabem como fazer (quem não mexe diretamente com isso não saberia)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.