Mural de fotos sem banco de dados
Antes de começar meu tutorial sobre o mural de fotos, vou contar uma pequena histórinha. Em 2004 foi o casamento do meu irmão do meio, e resolvi presentear os noivos com um site álbum de fotos. Na época tinha muito pouco conhecimento em PHP, e o site foi praticamente inteiro em HTML, com excesão dos comentários. Como tinha pouca experiência, inseri o código inteiro dos links das fotos na mão, passei 2 dias fazendo isso. Alguns anos mais tarde, com mais experiência, resolvi reformular alguns sites antigos e o do meu irmão foi um deles. No primeiro momento pensei em cadastrar todas as fotos em um banco de dados mas isso levaria tempo, porque eram muitas fotos. Como as fotos estavam devidamente ordenadas por números, pensei em outra alternativa: Abrir as pastas das fotos.
Veja o código simplificado abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <? $dir = $_GET["pasta"]; if($folder = opendir("$dir/fotos/mini")) { $i = 1; while(($arquivos=readdir($folder)) != false){ if($arquivos == "." or $arquivos == ".." or $arquivos == "Thumbs.db") continue; { if($i < 10) $i = "0".$i; $lista .= "<li><a href='popup.php?Foto=$i &Pasta=".$dir."' class='popup'> <img src='".$dir."/fotos/mini/foto".$i."mini.jpg alt='' border='0'/></a></li></n>"; $i++; } } closedir($folder); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> <html> <head> <title><?=$dir ?></title> </head> <body> <ul> <?=$lista ?> </ul> </body> </html> |
Onde a variável $dir (linha 2) recebe uma variável GET que corresponde ao nome da pasta que contém as imagens. A estrutura das imagens nas pastas é a mesma, ou seja, as imagens tem o mesmo padrão de nome. Após receber o nome da pasta, nós vamos abri-la com a função opendir() (linha 3),ler todos os arquivos do diretório com a função readir() e jogar esse conteúdo num loop while (linha 6).Depois é so ir concatenando o conteúdo numa variavel, no nosso caso a variável $lista(linha 10) e mandar imprimir no html (linha 27). Não podemos esquecer de fechar o diretório com a função closedir() (linha 17), pois desta forma a memória que foi usada para abrir o diretório será liberada e nosso código ficará mais leve para ser carregado. E pronto, temos uma solução simples de mural sem o uso de uma banco de dados. Espero que tenham gostado, um grande abraço.



Incrível como PHP facilita nossa vida xDDD
É um bom método de dispensar banco de dados!
Na parte de declaração das exceções da lista(.,..,thumbs.db), seria possível usar também:
if(substr($arquivos,-4,4)==”.jpg”) ou ainda:
if(strstr($arquivos,”.jpg”), certo? \o\
E interessante, eu não conhecia o continue, sempre procurei por uma alternativa parecida com o next do Perl, que é bastante útil na idéia.
Abraços! \o
Olá Ana Claudia,
Gostariade te pedir um favor, vc poderia detalhar melhor para mim as linhas 3, 8 e a parte do código que faz a exibição das fotos?
não consegui entender bem.
desde já obg!
Construir um site completo sem bancos de dados…
Queria ver se era possivel, e foi!
Olhe:
http://animesxplosion.com/
era um teste mas vou trabalhar nele. Gostei ficou mais rapido do que o com BD… Alem de ter um script mais simples e facil de mecher realmente PHP eh um linguagem incrivel.
Essa variavel $Total onde ela está sendo setada?
Desculpe, mas nao consegui colocar o seu codigo pra rodar..da erro na variavel lista.
Sou iniciante…poderia me ajudar?
Obrigado.
Notice: Undefined variable: Total in c:\program files\easyphp1-8\www\muralalx\mural_fotos.php on line 10
Notice: Undefined variable: lista in c:\program files\easyphp1-8\www\muralalx\mural_fotos.php on line 10
oi Alexandre, a variável $Total pegava o total de fotos dentro da pasta selecionada, onde eu tinha que fazer 2 loops para conseguir pegar o total de fotos sem pegar coisas a mais. Como neste caso é uma versão simplificada do código, acabei tirando essa variável.
Quanto ao segundo comentário seu, o problema deve estar ocorrendo provalvelmente porque a variavel não foi iniciada. Esse erro ocorre geralmente na versão 5.3 do PHP, que deve ser a qual você está utilizando, para isso eu recomendo a atualização da seguinte linha(mais ou menos na linha 514) no arquivo php.ini:
error_reporting = E_ALL & ~E_NOTICE
Você também pode remover a variável $Total, mas atualizando o php.ini você evita incovenientes de sempre ter essa mensagem e nem sempre é necessário setar uma variável.
Muito obrigado pela sua ajuda, me foi muito útil.