web-dev-qa-db-fra.com

Différence entre "include" et "require" en php

Y a-t-il une différence entre eux? Est-ce que leur utilisation est une question de préférence? L'utilisation de l'un sur l'autre présente-t-elle des avantages? Quel est le meilleur pour la sécurité?

169
Dan Hanly

Vous trouvez les différences expliquées dans le manuel détaillé de PHP sur la page de require :

require est identique à include sauf qu'en cas d'échec, une erreur fatale de niveau E_COMPILE_ERROR est également générée. En d'autres termes, le script sera arrêté alors qu'inclure émettra uniquement un avertissement (E_WARNING) permettant au script de continuer.

Voir la réponse de @ efritz pour un exemple

143
Steven

require génère une erreur fatale PHP si le fichier ne peut pas être chargé. (L'exécution s'arrête)

include génère un avertissement si le fichier ne peut pas être chargé. (L'exécution continue) 

Voici une belle illustration d'inclure et exiger une différence :

enter image description here

De:La différence nécessite vs include php (par Robert; Nov 2012)

178
efritz

Utilisez include si votre script ne vous dérange pas de continuer sans charger le fichier (s'il n'existe pas, etc.) et vous pouvez (bien que ce ne soit pas le cas) vivre avec l'affichage d'un message d'erreur Warning.

Utiliser require signifie que votre script s’arrêtera s’il ne parvient pas à charger le fichier spécifié et génère une erreur Fatal.

4
Martin Bean

Comme d'autres l'ont souligné, la seule différence est que require génère une erreur fatale et inclut - un avertissement interceptable. En ce qui concerne lequel utiliser, mon conseil est de s'en tenir à inclure. Pourquoi? parce que vous pouvez détecter un avertissement et produire un retour d'information significatif pour les utilisateurs finaux. Considérer

  // 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 pour fonctionner, vous devez installer un gestionnaire d’erreurs aux exceptions, comme décrit ici http://www.php.net/manual/fr/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");   
1
user187291
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>

Un exemple pratique très simple avec du code. Le premier écho sera affiché. Peu importe ce que vous utilisez ou nécessitez, car ses exécutions sont antérieures ou nécessaires.

Pour vérifier le résultat, à la deuxième ligne d'un code, indiquez intentionnellement un mauvais chemin d'accès au fichier ou faites une erreur dans le nom du fichier. Ainsi, le deuxième écho à afficher ou non sera totalement dépendant du fait que vous utilisiez require ou include .

Si vous utilisez require le second écho ne sera pas exécuté, mais si vous utilisez include , quelle que soit l'erreur commise, vous verrez également le résultat du second écho. 

0
Tara Prasad Gurung