Olá! Sunday, 24 de October de 2021.



Dicas CódigoFonte.net
Monday, 05 de November de 2007

Include_once ou Require_once?

Olá Pessoal,

Muitas pessoas tiram dúvidas de PHP comigo e certo dia uma delas me perguntou: "Qual a diferença entre Include_once e Require_once?"

Bom, ambos os comandos no PHP fazem a mesma coisa: Incluir um script em php na página apenas uma vez, ou seja, quando utilizamos várias vezes um mesmo script na página e se por acaso dentro deste script eu fazer o uso de outro que já foi usado na hierarquia, o include ou require once irá importar uma única vez, do contrario se usar o include ou require normal para cada chamada será importado o script.

Vou dar um exemplo utilizando o include que fica mais fácil de entender:

Temos 3 scripts, o funcao.php, index.php e contato.php

Em funcao.php temos:



Já em index.php eu faço a importação do script funcao.php e contato.php se eu passar na minha querystring ?acao=contato, por exemplo: http://localhost/teste/index.php?acao=contato



Porém, dentro do script contato.php eu também faço o uso do funcao.php (por algum motivo que só "Bial" pode explicar ehehehe)



Se você executar a página index.php?acao=contato, o PHP irá me retorna uma mensagem de warning, dizendo que a função "meunome()" não pode ser re-declarada:

Fatal error: Cannot redeclare meunome() (previously declared in C:apache2triadhtdocs estefuncao.php:5) in C:apache2triadhtdocs estefuncao.php on line 3

Isso aconteceu porque o index.php está usando o funcao.php que por sua vez usa o contato.php para exibir quando a querystring é "acao=contato" e esta, por último, também usa o funcao.php!!

Falei muito, mas não falei nada!!

Utilizando-se como base o exemplo anterior, se no lugar de utilizar include "funcao.php" no index.php e no contato.php, usasse include_once o script funcionaria perfeitamente, pois o PHP apenas irá incluir o script uma vez, mesmo eu colocando várias chamadas ao include_once dentro dos scripts.

Mas qual é a diferença entre include_once e require_once?

Como falei, ambos são iguais, porém, quando vemos a documentação sobre include e require, lemos que quando acontece um erro no include, por exemplo, o arquivo não existe, o PHP apenas mostra um "warning", ou seja, um aviso ao programador dizendo "Olha, o arquivo não existe, mas eu vou continuar". Já o require é mais drástico ao ponto de não permitir que a aplicação seja continuada se acontecer algum erro. Utilizando o exemplo anterior, se o arquivo não existe, o PHP avisa "O arquivo não existe e ponto final" e termina a execução do script sem mostrar o resto do arquivo.

Nessa matéria expliquei um pouco do uso do include_once e a diferença entre o require e include, espero que tenham gostado.

Até a próxima.

Comentários do artigo [Novo comentário]

Mateus - 17 de January de 2009 - 13:48
Pô valeu mesmo! matou dois coelhos de uma cajadada só. Eu também não sabia a diferença entre include e require. Valeu pela matéria, abração.
emerson - 07 de April de 2011 - 03:16
valeu muito bom
^^
tonemai fdp - 06 de September de 2012 - 15:22
Obrigado pela explicação,até hoje ninguém havia apresentado a diferença entre include_once e require_once com tanta clareza. :D
ROBSON SANTANA - 19 de February de 2015 - 23:01
VEJA E PODE ME AUXILIAR NESTA SITUAÇÃO

ESTE É O LINK DO MEU SITE.
http://portserviceunisind.com.br/

ESTE É O LINK PARA ACESSAR A PÁGINA E ME AJUDAR A DESCOBRIR PORQUE OS DADOS NÃO SÃO INSERIDOS NO BANCO.

http://portserviceunisind.com.br/teste_cad_cli/cadastro.html



OLÁ COMPANHEIRO SOU ESTUDANTE DE PHP/MYSQL E ESTOU ENFRENTANDO ESTE MESMO PROBLEMA NO MEU CURSO.

NÃO APARECE ERRO MAIS O REGISTRO NO DB NÃO ACONTECE. E NÃO ESTOU SABENDO RESOLVER OPROBLEMA.

SEGUE O LINK ONLINE PARA QUE VC TENTE UM CADASTRO E ME INFORME PARA QUE EU CONFIRA SE OS DADOS FORAM INSERIDOS COM SUCESSO.

MEU CEL É 21 96621-2956 MEU NOME ROBSON SANTANA

VOU COMENTAR O SEU CÓDIGO EU GOSTEI MUITO.

AGUARDO QUE VC POSSA ME AJUDAR.

SGUE O LINK DA PÁGINA PARA QUE VC POSSA ACESSAR ONLINE PARA TENTARMOS CORRIGIR O PROBLEMA.

http://portserviceunisind.com.br/teste_cad_cli/cadastro.html

SEGUE O CÓDIGO PHP QUE FIZ ALGUMAS MODIFICAÇÕES PÁRA ATUALIZAR.

<!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=utf-8" />
<title>Cadastro realizado com sucesso!</title>
</head>

<body>

<?php

$nome= $_POST ["nome"];
$email= $_POST ["email"];
$ddd= $_POST ["ddd"];
$tel= $_POST ["telefone"];
$endereco= $_POST ["endereco"];
$cidade= $_POST ["cidade"];
$estado= $_POST ["estado"];
$bairro = $_POST ["bairro"];
$pais= $_POST ["pais"];
$login= $_POST ["login"];
$senha= $_POST ["senha"];
$news= $_POST ["news"];
$sexo= $_POST ["sexo"];


@$conexao = @mysqli_connect("localhost","root");
if ([email protected]$conexao) {
die ("Erro de conexão com localhost, o seguinte erro ocorreu -> ".mysqli_error());
}

@$banco = @mysqli_select_db("clientes",$conexao);
if (!$banco){
die ("Erro de conexão com banco de dados, o seguinte erro ocorreu -> ".mysqli_error());
}


@$query = "INSERT INTO `clientes` ( `nome` , `email` , `sexo` , `ddd` , `telefone` , `endereço` , `cidade` , `estado` , `bairro` , `país` , `login` , `senha` , `news` , `id` )
VALUES ('$nome', '$email', '$sexo', '$ddd', '$tel', '$endereco', '$cidade', '$estado', '$bairro', '$pais', '$login', '$senha', '$news', '')";
@mysqli_query(@$query,@$conexao);

echo "Seu cadastro foi realizado com sucesso!Agradecemos a atenção.";

@$query_ver_sql = mysqli_query("SELECT `login` FROM `clientes` WHERE `login` = '$login'");

@$query_ver= mysqli_num_rows($query_ver_sql);

if($query_ver>0){
echo "Este login já esta em uso";
} else {
echo "Esta login não esta em uso";
}
?>

</body>
</html>

AGUARDO A SUA REPOSTA
Para adicionar um comentário você deve efetuar o login


Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:


CodigoFonte.net » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010