2010-09-03 7 views
165

Existe-t-il une différence entre eux? Est-ce que c'est une question de préférence? L'utilisation de l'un par rapport à l'autre produit-elle des avantages? Quel est le meilleur pour la sécurité?Différence entre "include" et "require" dans php

+4

duplication possible de [Quand devrais-je utiliser require_once vs include?] (Http://stackoverflow.com/questions/2418473/when-should-i-use-require-once-vs-include) – Gordon

+3

Toujours utiliser "require" ". "include" est aussi pratique qu'une porte électrique dans un sauna. –

+2

@MarcoMariani Comment cela serait-il gênant? C'est probablement clair, je ne le vois pas. Peut-être la vapeur? –

Répondre

138

Vous trouverez les différences expliquées dans le manuel PHP détaillé sur the page of require:

require est identique à include, sauf en cas d'échec, il produira également une erreur de niveau E_COMPILE_ERROR fatale. En d'autres termes, il arrêtera le script alors qu'inclure n'émet qu'un avertissement (E_WARNING) qui permet au script de continuer.

Voir @efritz's answer un exemple

+5

http://www.tiposaurus.co.uk/2011/04/04/the-difference-between-require-and-include/ "La principale différence entre require() et include() est que si vous avez besoin de() un fichier qui ne peut pas être chargé (par exemple s'il n'y est pas), il génère une erreur fatale qui arrêtera l'exécution du En revanche, si vous incluez() un fichier qui ne peut pas être chargé, cela ne fera que générer un avertissement et continuer à construire la page. " – stormwild

+3

"Ce que vous devez utiliser dépend de la situation, require() est le mieux adapté pour le chargement de fichiers essentiels au reste de la page - par exemple si vous avez un site Web piloté par base de données, utilisez require() pour inclure un fichier contenant le login et le mot de passe de la base de données sont clairement préférés à l'utilisation de include() Si vous avez utilisé include() dans cette situation, vous risquez de générer plus d'avertissements et d'erreurs que vous n'en aviez l'intention. – stormwild

+3

' cHao

175

require jetteront une erreur fatale PHP si le fichier ne peut pas être chargé. (Arrêt d'exécution)

include produit un avertissement si le fichier ne peut pas être chargé. (Exécution continue)

Voici une belle illustration of include and require difference:

enter image description here

De:Difference require vs. include php (by Robert; Nov 2012)

+1

le lien est cassé –

+0

Il est une réponse vieille de six ans ... – efritz

+0

Voir une différence de capture d'écran entre include et require function, http://whats-online.info/science-and-tutorials/83/Free-Beginner -PHP-Tutorials --- Inclure-et-exiger-des-fonctions/... –

4

Utilisez include si vous ne me dérange pas votre script continue sans charger le fichier (dans le cas où il n'existe pas, etc.) et vous pouvez (bien que vous ne devriez pas) vivre avec un message d'erreur d'avertissement affiché.

En utilisant require signifie que votre script arrêter si elle ne peut pas charger le fichier spécifié, et lancer une erreur fatale.

1

Comme d'autres l'ont souligné, la seule différence est que nécessite génère une erreur fatale, et comprend - un avertissement capturables. Quant à celui à utiliser, mon conseil est de s'en tenir à inclure. Pourquoi? parce que vous pouvez attraper un avertissement et produire une rétroaction significative aux utilisateurs finaux. Considérez

// Example 1. 
    // users see a standard php error message or a blank screen 
    // depending on your display_errors setting 
    require 'not_there'; 


    // Example 2. 
    // users see a meaningful error message 
    try { 
     include 'not_there'; 
    } catch(Exception $e) { 
    echo "something strange happened!"; 
    } 

NB: par exemple 2 fonctionne, vous devez installer un gestionnaire d'erreurs à des exceptions, comme décrit ici http://www.php.net/manual/en/class.errorexception.php

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
    } 
    set_error_handler("exception_error_handler"); 
+0

Au niveau de l'inclusion n'est pas un bon endroit pour apprendre que le fichier que vous attendez n'est pas là. Aucun des problèmes dans votre exemple est celui de pousser sur les visiteurs de votre site Web. – Kzqai

3

La principale différence entre require() et include() est que si vous require() un fichier qui ne peut pas être chargé (par exemple s'il n'est pas là) puis il génère une erreur fatale qui arrêtera complètement l'exécution de la page, et plus aucune sortie ne sera générée. D'autre part, si vous include() un fichier qui ne peut pas être chargé, alors cela va simplement générer un avertissement et continuer à construire la page.

-2

En cas d'inclure le programme ne se termine pas et l'avertissement d'affichage sur le navigateur, d'autre part exiger programme prendra fin et affiche une erreur fatale en cas de fichier non trouvé.

+0

Avez-vous vraiment dû bousculer une question de 2 ans et demi pour répéter ce que 2/3 des réponses ont déjà dit ...? – cHao

+4

Aww, il est un débutant! Probablement ne comprend pas encore le concept de SO. –

+2

Je dis en mots simples ... !!! –

0
<?PHP 
echo "Firstline"; 
include('classes/connection.php'); 
echo "I will run if include but not on Require"; 
?> 

Un exemple très pratique avec code. Le premier écho sera affiché. Peu importe que vous utilisiez include ou require, car il s'exécute avant ou inclut.

Pour vérifier le résultat, Dans la deuxième ligne d'un code fournir intentionnellement le mauvais chemin d'accès au fichier ou faire une erreur dans le nom du fichier. Ainsi, le deuxième écho à afficher ou non dépendra totalement si vous utilisez require ou include.

Si vous utilisez nécessitent le second écho ne sera pas exécuté mais si vous utilisez comprennent peu importe quelle erreur vient vous voir le résultat de second écho aussi.

Questions connexes