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

include_path

aqui, no meu caso, me apareceu o seguinte (considerem apenas a primeira coluna (’local value”) :

.:/usr/share/pear:/usr/share/php

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

isso quer dizer que eu vou ter que por nessa pasta todos os arquivos que eu desejo incluir nos meus scripts?

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 :


Menu 1 | Menu 2 | Menu 3 | Menu 4
Qualquer conteudo aqui
Rodape do site

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?

simples, utilizamos o incrivel recurso do “copiar, colar” e modificamos apenas o conteúdo da página

e se eu precisar modificar uma letra no rodapé ou adicionar uma nova entrada no menu eu edito todos os cinco arquivos novamente?

ééé…tem que ser né

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 :

  1. procura no diretório definido na diretiva “include_path” do php.ini
  2. se não achou o arquivo no “include_path”, procura no caminho relativo ao script que está sendo executado (nesse caso, “index.php”)
  3. 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 :

  1. 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
  2. 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)
  • Faz praticamente o mesmo que a função “include()”
  • Caso o arquivo não possa ser incluído (não exista, não possua permissão de acesso no arquivo, etc), a função “require()” gera um erro do tipo “E_ERROR” (”erro”) que encerra com a execução do script (você ainda lembra que o “include()” gera um “E_WARNING” (”aviso”) caso o arquivo não exista né?)
Dica(s)
  • Use e abuse dessa função no caso de ser necessária a inclusão de um arquivo de configuração, banco de dados, ou qualquer outro de extrema importância para a funcionalidade do sistema
Faça o Teste
  • no lugar de “<? include(’menu.php’) ?>” troque para “<? include(’menus.php’) ?>” e veja o que acontece, após isso modifique para “<? require(’menus.php’) ?>” e veja a diferença

Função “include_once()
Descrição/Diferença(s)
  • Faz exatamente o mesmo que a função “include()”, porém se o arquivo já tiver sido incluído, ele não é incluso novamente
  • Caso tente incluir um arquivo já incluso, nenhum erro ou aviso é gerado, o arquivo apenas não é incluso
Dica(s)
  • Essa função é extremamente útil quando existe a possibilidade de redeclaração de funções
  • È mais “lerda” do que a função “include()” ou “require()”
  • Todo e qualquer script php que utilize a função “include_once”, pode funcionar apenas com a função “include()” ou “require()”, e, caso um script utilize esta função com muita frequência, isso pode ser sinal de que um programador não tão habilidoso (ou diria até mesmo “desorganizado”/”desatento”/etc) “tocou” naqueles scripts
Faça o Teste
  • abaixo de “<? include(’menu.php’) ?>” adicione uma nova linha contendo “<? include(’menu.php’) ?>” para que apareçam dois menus, após isso, modifique o segundo “<? include(’menu.php’) ?>” para “<? include_once(’menu.php’) ?> e veja o que acontece

Função “require_once()
Descrição/Diferença(s)
  • Faz exatamente o mesmo que a função “require()”, porém se o arquivo já tiver sido incluído, ele não é incluso novamente
  • Caso tente incluir um arquivo já incluso, nenhum erro ou aviso é gerado, o arquivo apenas não é incluso
Dica(s)
  • Essa função é extremamente útil quando existe a possibilidade de redeclaração de funções
  • È mais “lerda” do que a função “include()” ou “require()”
  • Todo e qualquer script php que utilize a função “require_once”, pode funcionar apenas com a função “include()” ou “require()”, e, caso um script utilize esta função com muita frequência, isso pode ser sinal de que um programador não tão habilidoso (ou diria até mesmo “desorganizado”/”desatento”/etc) “tocou” naqueles scripts
Faça o Teste
  • abaixo de “<? include(’menu.php’) ?>” adicione uma nova linha contendo “<? require(’menu.php’) ?>” para que apareçam dois menus, após isso, modifique “<? require(’menu.php’) ?>” para “<? require_once(’menu.php’) ?> e veja o que acontece

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

VN:F [1.4.3_701]
Rating: 7.0/10 (4 votes cast)


Postagens parecidas/interessantes:

  1. 9 Responses to “PHP e includes : A Praticidade”

  2. 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

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  3. 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

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  4. 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

    1
    2
    3
    
    <div class="estilo">
        Menu 1 | Menu 2 | Menu 3 | Menu 4
    </div>

    e na index.php :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <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

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  5. 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

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  6. 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

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  7. By lucio on jun 29, 2009 | Reply

    DragaO~
    parabéns pelo seu blog. Muito bom!!

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  8. 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

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  1. 2 Trackback(s)

  2. mar 6, 2009: Blog do DragaO~ » Blog Archive » PHP OO : Acessando Objetos em qualquer página
  3. set 3, 2010: Função include em PHP — Cafofo do programador

Deixe um comentário

Vai postar algum código? Leia isso antes