Y a-t-il une différence entre eux? Leur utilisation est-elle une question de préférence? L'utilisation de l'un par rapport à l'autre présente-t-elle des avantages? Quel est le meilleur pour la sécurité?
Y a-t-il une différence entre eux? Leur utilisation est-elle une question de préférence? L'utilisation de l'un par rapport à l'autre présente-t-elle des avantages? Quel est le meilleur pour la sécurité?
Réponses:
Vous trouverez les différences expliquées dans le manuel PHP détaillé sur la page derequire
:
require
est identique àinclude
sauf en cas d'échec, il produira également uneE_COMPILE_ERROR
erreur de niveau fatale . En d'autres termes, il arrêtera le script alors que include n'émet qu'un avertissement (E_WARNING
) qui permet au script de continuer.
Voir la réponse de @ efritz pour un exemple
<?php if (isset($flibbertygibbet)) require 'file.php';
semblerait rendre cette réponse totalement incorrecte. Sinon, je devrais obtenir une erreur fatale même si la condition n'est pas vraie. strace
ne montre même pas que PHP essaie de toucher file.php
.
if (false) require 'file.php';
cela entraînerait le chargement de 'file.php' (mais non exécuté). TLDR ne tient pas compte de tous ces commentaires.
require
lancera une erreur fatale PHP si le fichier ne peut pas être chargé. (L'exécution s'arrête)
include
produit un avertissement si le fichier ne peut pas être chargé. (L'exécution continue)
Voici une belle illustration d'inclure et d'exiger la différence :
De: Différence requiert vs inclure php (par Robert; novembre 2012)
À utiliser include
si cela ne vous dérange pas que votre script continue sans charger le fichier (au cas où il n'existe pas, etc.) et que vous pouvez (bien que vous ne devriez pas) vivre avec un message d'erreur d'avertissement affiché.
L'utilisation require
signifie que votre script s'arrêtera s'il ne peut pas charger le fichier spécifié et génère une erreur fatale.
Comme d'autres l'ont souligné, la seule différence est que require jette une erreur fatale et inclut - un avertissement capturable. Quant à savoir lequel utiliser, mon conseil est de s'en tenir à l'inclure. Pourquoi? parce que vous pouvez attraper un avertissement et produire un retour significatif aux 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 à 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");
<?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 que vous utilisiez include ou require, car il s'exécute avant include ou required.
Pour vérifier le résultat, dans la deuxième ligne d'un code, indiquez intentionnellement le mauvais chemin vers le fichier ou faites une erreur dans le nom du fichier. Ainsi, le second écho à afficher ou non dépendra totalement du fait que vous utilisiez require ou include .
Si vous utilisez require, le deuxième écho ne s'exécutera pas, mais si vous utilisez include, quelle que soit l'erreur qui survient, vous verrez également le résultat du deuxième écho.
Dans le cas où le programme Inclure ne se terminera pas et affichera un avertissement sur le navigateur, D'autre part, le programme Require se terminera et affichera une erreur fatale en cas de fichier introuvable.