PHP e includes : A Praticidade
dezembro 30th, 2008 | by DragaO~ |Atendendo o pedido do colega Heverton, cá estou trazendo este tutorial sobre includes e php :D
quem já programou em outras linguagens como o C, certamente já se deparou com includes, porém no PHP funciona um pouquinho diferente ;)
no C, nós podemos incluir, até onde sei, apenas os arquivos que estão definidos no nosso diretório de includes (no linux, geralmente é algo como “/usr/include”) e no PHP é a mesma coisa, podemos incluir arquivos do nosso diretório de includes, definido pela diretiva “include_path” em nosso php.ini
para descobrir o local padão onde o PHP “busca” as includes, basta criar um arquivo com o seguinte conteúdo
1 2 3 | <? phpinfo(); ?> |
salve este arquivo com o nome de “phpinfo.php” e coloque dentro do diretório da raiz de seu servidor web.
acesse-o e procure pela diretiva
aqui, no meu caso, me apareceu o seguinte (considerem apenas a primeira coluna (’local value”) :
esse é o caminho da pasta onde o PHP vai procurar os arquivos a serem incluídos, portanto, assim como no C o PHP também tem essa funcionalidade
a resposta é NÃO, tu pode colocar onde desejar, e já já vamos ver como isso funciona
bem, vamos imaginar o seguinte exemplo : imaginemos que temos um site com três “partes”, um barra de menus ao todo, uma área de conteúdo ao centro e um rodapé
agora vamos imaginar também que nós fizemos essa pagina toda em HTML, como segue o exemplo abaixo :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Teste de Includes</title> </head> <body> <div> Menu 1 | Menu 2 | Menu 3 | Menu 4 </div> <div> Qualquer conteudo aqui </div> <div> Rodape do site </div> </body> </html>
vamos chamar este arquivo de “index.php”
este codigo deve renderizar da seguinte maneira :
lembre-se : isto é um exemplo e deve ser simples
ótimo, temos nossa página pronta e funcionando
porém, cada um daqueles menus é uma página com um conteúdo diferente, então o que fazemos?
e se eu precisar modificar uma letra no rodapé ou adicionar uma nova entrada no menu eu edito todos os cinco arquivos novamente?
não, não tem que ser assim, pois é pra isso que existem as includes :D
primeiramente, vamos criar um arquivo com o seguinte conteúdo
1 2 3 | <div> Menu 1 | Menu 2 | Menu 3 | Menu 4 </div> |
vamos chamar este arquivo de “menu.php”, e vamos criar outro arquivo chamado “rodape.php” com o seguinte conteúdo :
1 2 3 | <div> Rodape do site </div> |
importante : salve-os no mesmo diretório do index.php
agora vamos modificar a nossa index.php para ter o seguinte conteúdo :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Teste de Includes</title>
</head>
<body>
<? include('menu.php') ?>
<div>
Qualquer conteudo aqui
</div>
<? include('rodape.php') ?>
</body>
</html> |
o comportamento padrão da função “include()” é o seguinte :
- procura no diretório definido na diretiva “include_path” do php.ini
- se não achou o arquivo no “include_path”, procura no caminho relativo ao script que está sendo executado (nesse caso, “index.php”)
- se não achou no caminho relativo, gera um erro do tipo “E_WARNING” (”aviso”) e continua com a execução do script (caso queira ver como é a mensagem de erro, tente incluir o arquivo “menus.php” (com o “s” no final) e veja a mensagem mostrada)
agora devemos fazer essa alteração para todos arquivos que possuem o menu e o rodapé, pois, infelizmente,, ainda é impossível gerar conteúdo em um site sem digitá-lo :D
agora acessando este arquivo, a saída deve ser exatamente como a saída anterior, porém temos duas grandes diferenças :
- quando for necessário modificar o menu ou o rodapé, basta acessar os arquivos “menu.php” e “rodape.php” para que as alterações sejam feitas em todo o site
- o código ficou mais modular, ou seja, ficou mais “separado” e mais “focado” (afinal, se eu quiser modificar o menu, eu vou no “menu.php” diretamente, não tenho o trabalho de localizar o menu em um código imenso)
parabéns, agora você sabe utilizar includes para deixar o seu trabalho mais prático, fácil de dar manutenção e organizado
adicionalmente, no PHP, existem outras duas funções que fazem mais ou menos o que a função “include()” faz, são elas :
| Função “require()” |
| Descrição/Diferença(s) |
|
| Dica(s) |
|
| Faça o Teste |
|
| Função “include_once()” |
| Descrição/Diferença(s) |
|
| Dica(s) |
|
| Faça o Teste |
|
| Função “require_once()” |
| Descrição/Diferença(s) |
|
| Dica(s) |
|
| Faça o Teste |
|
referências sobre as diretivas do php.ini :
“include_path”
referências sobre as constantes do PHP :
constantes de erro do php
referência das funções :
“phpinfo()“, “include()“, “require()“, “include_once()“, “require_once()”
bom, vou ficando por aqui com este tutorial
qualquer problema com os códigos ou explicações, avise-me, em caso de dúvidas você pode e deve perguntar
Até a próxima
9 Responses to “PHP e includes : A Praticidade”
By Claiton on jan 2, 2009 | Reply
Eita!!!
Certamente muita gente tem duvida sobre isso, e também sobre o lance do form do outro post(é to comentando aqui pq fiquei com preguiça de voltar..:D).
E como sempre explicaste com maestria e o post ta tão bem explicado que a pessoa pode ler sem prestar muita atenção e ainda sim vai entender…
euaheuhaue
É sério!
Flw cara e continua assim que tu tem o dom da palavra da Informatica…
Abraço!
Quote
By claudio on mar 7, 2009 | Reply
Olha amigo não tenho palavras para expressar , o quão grande é minha gratidão por encontrar alguém que expresse de uma forma tão simples e objetiva uma duvida que eu ando pesquizando a muitos dias .
Com certeza você ja deve saber que sou um iniciante em conhecimentos para web.
Mas infelizmente falta informação de formas simples e objetivas como a que você descreveu logo acima.
Só peço mais uma informação ,quando eu criar meu layolt dinamico com o include ,eu terei que especificar a forma de comportamento das divs ou conteudo,usando /style.css.
Então eu terei que colocar na index ou nas paginas alocadas a ela ?
ou terei que criar um para cada página ?
Me desculpe pela ignorancia.
Obrigado desde ja ,e com certeza estarei sempre passando por aqui para ler seu conteúdo.
Quote
By DragaO~ on mar 7, 2009 | Reply
Puxa, quanto elogio :)
Obrigado por cada um deles, fico imensamente feliz em receber isso tudo :)
Pois é, tenho notado que algumas pessoas tiveram essa mesma dúvida, tava até pensando em modificar um pouco o post e ensinar essa parte, mas bem, vamos à resposta ;)
Assim, quando tu pega algo e inclui em uma página, vai ter o mesmo efeito que tu tivesse digitado todo o conteúdo da include ali, seja ele (o conteúdo da include) código PHP, HTML ou qualquer outra coisa
O que eu quero dizer, é que se tu seguir o meu exemplo acima, e incluir algo, tu pode apenas declarar uma classe CSS na div de menu (por exemplo) e na index (que é onde é incluso o menu), criar a classe CSS para isso, algo mais ou menos assim :
menu.php
e na index.php :
<html> <head> <style type="text/css"> div.estilo { color: #FF0000; } </style> </head> <? //resto de codigo... ?>não sei se deu pra entender, mas seria essa a idéia, portanto, tu poderia declarar todos os estilos index.php, e utiliza-los normalmente dentro de qualquer arquivo, seja ele include ou não, desde que, obviamente, o conteúdo esteja “dentro” da index.php ;)
Se mesmo assim ficou confuso, me avisa que eu vou tentar explicar de outra maneira :)
Obrigado pelo comentário :)
Quote
By claudio on mar 9, 2009 | Reply
Olá amigo sou grato por me responder .
Tudo ficou claro agora .
Eu fiz testes aqui e tudo está ok.
:)Realmente existem pessoas que tem o dom de explicar ,valeu mesmo e grande abraço
Quote
By DragaO~ on mar 9, 2009 | Reply
Eu sempre respondo aos comentários, gosto de dar atenção à todos, afinal, é graças aos comentários e visitantes que eu ainda mantenho isso “de pé” :)
Bem que eu gostaria de ser professor, mas como ainda não dou aulas, vou de blog mesmo :D
Abraço
Quote
By lucio on jun 29, 2009 | Reply
DragaO~
parabéns pelo seu blog. Muito bom!!
Quote
By Elton on out 11, 2009 | Reply
Muito bom, dei uma olhada só de relance( ok, só uma corrida de olhos) e, por incrível que pareça, consegui entender algo que, nem com a explicação da php.net, consegui entender, até agora é claro.
Vlw pelo post, excelente.
Quote