Com este post quero compartilhar minhas experiências para a construção de uma boa estrutura física para os arquivos de um site.
Claro que existem muitas formas de se organizar os arquivos de um site, mas já faz algum tempo que venho utilizando esse tipo de organização e não me arrependo, depois que comecei a utilizar e implantei junto com meus colegas da agência hive, a forma com que passamos a fazer o suporte em sites mais antigos com essa estrutura está nos poupando muito tempo.
Vamos as especificações da estrutura de arquivos e pastas:
1. Organize as pastas por funções, cada pasta com sua função determinada e bem nomeada
Escolha uma nomenclatura clara e auto-explicativa para as pastas e o mais importante mantenha um padrão na nomenclatura, nunca mude. Eu uso a seguinte estrutura:
/cms: é onde fica a ferramenta de gestão do site.
/css: responsável por armazenar as folhas de estilo do site.
/img: é onde são estocadas todas as imagens do layout do site.
/incs: é onde estão localizadas as páginas internas do site, que no final das contas são apenas includes, veremos mais a frente esse assunto.
/lib: nesta pasta ficam ações como por exemplo as de um formulário de cadastro de currículos ou qualquer ação mais detalhada que use a linguagem de programação utilizada, no nosso caso PHP.
/scripts: aqui ficam salvos todos os scripts de interação do site.
/swf: pasta de armazenamento para os arquivos em flash.
/uploads: todo conteúdo enviado pelo administrador do site pelo CMS é armazenado aqui, desde videos, músicas e imagens de conteúdo.
/xml: aqui é o lugar dos dados salvos em xml para ser usado no site.
2. Nomenclatura de arquivos
Definir um padrão para o nome dos arquivos pode ajudar muito quando o site já tem um certo tempo e não é modificado muito constantemente. Se for seguido um padrão além de todos da equipe entenderem com mais facilidade o tempo para encontrar esses arquivos pode ser muito menor.
Por exemplo: se você utiliza junto com seu código próprio algum framework de JavaScript como jQuery ou Prototype por exemplo, seria muito útil utilizar o nome do framework no início do arquivo – jquery.funcoes-gerais.js – assim sem nem ao menos abrir o arquivo já sabemos que o mesmo contém funcoes gerais que usam o jQuery.
3. Estrutra da index e includes das páginas internas
A forma com que se define o processo de inclusão das páginas internas pode determinar o futuro no que diz respeito a tempo de desenvolvimento no suporte de um site. O método que utilizamos é em forma de includes em PHP das páginas internas direto na index.php do site, bem, vamos ver mais detalhado:
Suponhamos um site com 4 grandes partes: HEADER, SIDEBAR, CONTENT e FOOTER, e as 3 partes mais claras da imagem abaixo – <header> <sidebar> <footer> - se repetem em todas as páginas do site tanto na página inicial como nas páginas internas. Então só o que muda na verdade é a parte mais escura <content>, pois bem é ali que agiremos para que a partir da index.php sejam chamadas todas as páginas internas do site.

O uso de um script que seja genérico e não precise de alteração constante é a melhor opção neste caso. Aqui vou mostrar um script bem simples que apenas chama a página requisitada – CMD – se a mesma existe no diretório das páginas internas – /INCS – caso contrário retorna um código HTTP 404 de arquivo não encontrado, o que é muito importante para SEO, seja o script abaixo em PHP:
<?php
#Verifica se existe o parâmetro que chama as páginas internas
if ($_GET[cmd]) {
# Checa se existe o arquivo dentro do diretório de páginas internas
if (is_file("./incs/" . $_GET[cmd]) . ".php")) {
# se existe o arquivo inclui o conteúdo do mesmo
include_once("./incs/" . $_GET[cmd]) . ".php");
# caso contrário se não existir arquivo
} else {
# retorna cabeçalho HTTP 404 e inclui o arquivo de erro padrao
header("HTTP/1.0 404 Not Found");
include_once("./incs/404");
}
# Se não existir parâmetro de página interna significa que está na home
} else {
# inclui o conteúdo da home
include_once("incs/home.php");
}
?>
Como disse este script é bem simples mas funciona perfeitamente para essa função.
Para que não haja duplicação de contaúdo nas páginas do site este script precisa ser incrementado de mais algumas funções para checar URL`s válidas e inválidas, retornar Status HTTP adequados e fazer os redirecionamentos corretos.
Como esse assunto é bem extenso e o script também resolvi deixar para o próximo post, então …
No próximo post vou passar uma nova versão deste script onde resolveremos definitivamente o problema de URL`s duplicadas para o mesmo conteúdo.

Muito boa dica Ronaldo… Parabéns!
Ótimas dicas, mas eu como programador recomendo sempre usar Debug, vulgo error_reporting até o toba, no período de desenvolvimento de um site/sistema, evita dores de cabeças futuras! :D
No includezão é utlizado:
if ($_GET[cmd]) {
tornar:
if (isset($_GET[cmd]) && $_GET[cmd]) {
Em ambiente normal o $_GET[cmd] é ignorado pois cmd não foi repassado por URL. Em verdade apenas gera um erro do tipo NOTICE, mas como é um erro sempre vai cair no log.
Abraços.
Opa show de bola Stephan, sempre é bom previnir todos os bugs possíveis realmente.
Ótimo complemento no script também, sempre é bom a opinião de um especialista em cada área.
[...] = ‘oronaldosantos’; Como tinha prometido no post anterior onde citei algumas dicas de como otimizar a estrutura dos arquivos do seu site agora vamos falar mais afundo de como evitar conteúdo duplicado, que é um assunto muito [...]
Excelente post Ronaldo, para um melhor desenvolvimento ou um futuro suporte usamos uma estrutura semelhante para poupar menos tempo que é a seguinte:
pastas
/conteudo – páginas internas do site, home, empresa, contato…
/library – classe phpmailer para envio de e-mails de form, newsletters…
/incs – essa usamos para nosso arquivo de title, keywords, description e corpo dos e-mails, enviados pelo site.
/public – dentro dessa temos:
/css – estilos.css
/scripts – jquery.1.2.6.js / masked-input / valida-forms….
/swf – slide-home.swf
/docs – se necessários documentos para downloads
/imagens – imagem do site, porém não colocamos todas as imagens que fazem parte do site pois iria virar bagunça então dividimos como:
para fotos:
/imagens/fotos/foto-01.jpg
para thumbs das imagens:
/imagens/thumbs/foto-01.jpg
E por último temos a index.php que nessa contém o include que chama as página internas da pasta /conteudo e assim por diante.
Espero ter ajudado com meu comentário.
Ronaldo, entre nós é um pé no saco prestar um suporte quando temos um site todo bagunçado fora de estrutura alguma concorda comigo?
Abraço.