Curso de PHP: Separando o código em arquivos (include e require)
A organização de um programa ou página é um fator imprescindível para o sucesso da aplicação. Tendo seus códigos organizados, qualquer alteração ou evolução será feita sem grandes dificuldades. Como medida de organização de código, costumamos separar os trechos do programa em vários arquivos, agrupando em cada arquivo os códigos que tem algo em comum.
Depois que separamos, poderemos usar cada arquivo em qualquer código, bastando indicar ao PHP que você vai usar o arquivo, para isso temos duas formas: include e require.
include
O comando include inclui um arquivo dentro de outro. Vamos criar por exemplo, um arquivo chamado cabecalho.php:
<h1>Cabeçalho</h1> <? echo '<p>Bom Dia</p>'; ?>
O arquivo acima será incluído dentro de outro. Mas ele é um arquivo normal, não há nenhuma diferença dos demais.
Agora iremos criar o arquivo principal.php que inclui o cabecalho.php, veja:
<?php include 'cabecalho.php' ?>
Se você executar esse arquivo, você verá o conteúdo do cabecalho.php
Mas vamos executar um outro exemplo, vamos criar o arquivo conteudo.php:
<p>Esse é o conteúdo da nossa página</p>
E vamos criar um arquivo chamado rodape.php:
<hr /><p>Esse é o rodapé </p>
Agora alterando o arquivo principal.php vamos incluir os três arquivos:
<?php
include 'cabecalho.php';
include 'conteudo.php';
include 'rodape.php';
?>Acesse a página acima e perceba que aonde colocamos o comando include, o PHP leu o arquivo que indicamos e colocou seu conteúdo naquele ponto.
Com o comando include, podemos incluir várias vezes o mesmo arquivo:
<?php
include 'cabecalho.php';
include 'conteudo.php';
include 'conteudo.php';
include 'conteudo.php';
include 'rodape.php';
?>Veja que ele inclui o conteudo.php três vezes.
include_once
O include_once é uma instrução semelhante ao include com uma variação: ele só inclui o arquivo na primeira vez. Se o arquivo já estiver sido incluído antes, ele não inclui novamente. Vamos fazer um teste, altere o arquivo principal.php para:
<?php
include_once 'cabecalho.php';
include_once 'conteudo.php';
include_once 'rodape.php';
?>Você pode notar que o resultado é o mesmo que se estivesse usando só o include. Porém, vamos testar da seguinte forma:
<?php
include_once 'cabecalho.php';
include_once 'conteudo.php';
include_once 'conteudo.php';
include_once 'conteudo.php';
include_once 'rodape.php';
?>Agora sim a diferença. Mesmo colocando para incluir o arquivo conteudo.php 3 vezes, ele só incluiu uma. Isso porquê utilizamos o include_once, que inclui o arquivo apenas a primeira vez. As próximas vezes que solicitarmos ao PHP para incluir o arquivo, ele irá ignorar.
require
A função da instrução require é a mesma do include. Inclusive trabalha da mesma forma. O require pega o conteúdo do arquivo e inclui no logar que foi chamado. Por exemplo:
<?php
require 'cabecalho.php';
require 'conteudo.php';
require 'rodape.php';
?>O resultado será o mesmo que o include. E também existe o require_once, que faz a mesma coisa coisa que o include_once, veja:
<?php
require_once 'cabecalho.php';
require_once 'conteudo.php';
require_once 'conteudo.php';
require_once 'conteudo.php';
require_once 'rodape.php';
?>Nenhuma diferença do include_once.
Qual a diferença entre include/include_once e require e require_once.
Esses comandos não são exatamentes iguais. A diferença entre os dois comandos aparecem quando acontece erro na inclusão do arquivo.
Um erro na inclusão do arquivo pode acontecer ou por não existir, ou por você não ter permissão de leitura para o arquivo.
Quando o include/include_once não consegue incluir o arquivo, ele gera um erro do tipo WARNING. Esse tipo de erro é aviso para que tem alguma coisa errada (nesse caso erro na inclusão do arquivo). Mesmo emitindo um erro do tipo Warning, o PHP tenta prosseguir processando o restante do script. Veja um exemplo:
<?php
include 'cabecalho.php';
include 'incluindoumarquivoquenaoexiste.php';
include 'conteudo.php';
include 'conteudo.php';
include 'conteudo.php';
include 'rodape.php';
?>Executando o código acima, você verá uma mensagem semelhante á abaixo:
Warning: include(incluindoumarquivoquenaoexiste.php) [function.include]: failed to open stream: No such file or directory in C:\projetos\principal.php on line 4 Warning: include() [function.include]: Failed opening 'incluindoumarquivoquenaoexiste.php' for inclusion (include_path='.;C:\php\pear') in C:\projetos\principal.php on line 4
Mas você pode notar que abaixo da mensagem a execução continua, incluindo os demais arquivos.
Já o require, quando não consegue incluir um arquivo ele gera um erro do tipo FATAL, abortando a execução do script. Ou seja, onde acontecer o erro o PHP irá parar. Veja o exemplo:
<?php
require 'cabecalho.php';
require 'incluindoumarquivoquenaoexiste.php';
require 'conteudo.php';
require 'conteudo.php';
require 'conteudo.php';
require 'rodape.php';
?>Caminho absoluto, relativo e include_path
Os exemplos acima irão funcionar primeiramente se você colocar os arquivos na mesma pasta. Para funcionar apenas indicamos o nome do arquivo, e nada mais.
Poderíamos passar a localização completa do arquivo, exemplo:
include 'C:\projetos\cabecalho.php';
Quando passamos o caminho completo estamos passando o caminho absoluto. O problema é que se você mudar o arquivo para outro disco com outra letra, você precisará alterar todo arquivo que estiver fazendo referência ao arquivo com caminho absoluto.
Outra forma de passar o caminho dos arquivos é usando caminhos relativos.
Vamos definir uma estrutura de diretórios para exemplo, imagine que você tem os seguintes arquivos:
C:\
|--- projetos
| |--- partes\
| |--- cabecalho.php
| |--- rodape.php
| |--- principal.php
|
|--- outrapasta\
|--- conteudo.php
Separamos todos os arquivos em várias pastas. Como incluí-las no código agora? Ou passamos o caminho absoluto de cada arquivo, ou fazemos relativo ao arquivo que iremos acessar.
Como nós iremos acessar o arquivo principal.php, a localização dos demais será relativa a ele. Então ele é o ponto refencial.
O arquivo cabecalho.php está em em uma subpasta partes, como a pasta partes está no mesmo nível que o arquivo principal.php, então podemos simplesmente indicar o caminho como "partes/cabecalho.php":
include 'partes/cabecalho.php';
O arquivo conteudo.php está em uma pasta chamada outrapasta. A pasta outrapasta está em uma pasta anterior ao arquivo principal.php. Fazendo uma analogia simplificada, para incluirmos o arquivo conteudo.php temos que sair da pasta atual. Para indicarmos uma pasta anterior, utilizamos a notação "../", então vejamos como posso indicar para incluir o arquivo conteudo.php :
include '../outrapasta/conteudo.php';
Podemos ler como "sair da pasta atual, entrar na pasta outrapasta, incluir o arquivo conteudo.php". Pode haver "../" forem necessários, representando cada nível necessário para sair.
E para indicar que o arquivo está no diretório atual, utilizamos a notação "./".
Seguindo nossa nova estrutura de diretórios, poderíamos escrever o principal.php dessa forma:
<?php
require_once 'partes/cabecalho.php';
require_once '../outrapasta/conteudo.php';
require_once './partes/rodape.php';
?>include_path
A forma que utilizamos desde o começo do post, que colocamos apenas o nome do arquivo, é possibilitado por que existe o include_path. O include_path é uma diretiva de configuração do PHP que permite indicar onde o PHP deve procurar os arquivos quando tentamos incluí-los com caminho relativo.
Tendo configurado os diretórios no include_path você pode economizar o trabalho de digitar até os diretórios relativos. Um exemplo é a forma que você consegue incluir os arquivos que estão na mesma pasta. O correto seria você indicar os arquivos da seguinte forma:
include './conteudo.php';
Você só consegue incluir os arquivos no mesmo diretório sem utilizar o './' é porquê o './' já está no include_path.
É muito comum ter dificuldades para entender essa parte de caminhos relativos, por isso, pode utilizar o espaço de comentários para tirar sua dúvida.
- Login to post comments




