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é?
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 niveauE_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
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 :
De:La différence nécessite vs include php (par Robert; Nov 2012)
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.
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");
<?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.