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é?
Utilisez toujours "require". «inclure» est aussi pratique qu'une porte électrique dans un sauna.
Marco Mariani
2
@MarcoMariani En quoi cela serait-il gênant? C'est probablement clair, je ne le vois tout simplement pas. Peut-être la vapeur?
Austin Burk
Pour faire simple, si un fichier «foo.php» est manquant par erreur, je veux savoir le plus tôt possible, pas quand une fonction qui aurait dû être dans foo.php est appelée. Le remplacement de include par require peut souvent révéler des bogues. Disons que config.php est manquant et que l'application s'exécute avec une configuration par défaut. Quel est le meilleur pour la sécurité? Quant au sauna, quand je suis à l'intérieur et que la porte ne s'ouvre pas pour une raison quelconque, je n'aime pas ça.
Marco Mariani
Réponses:
148
Vous trouverez les différences expliquées dans le manuel PHP détaillé sur la page derequire :
requireest identique à includesauf en cas d'échec, il produira également une E_COMPILE_ERRORerreur 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.
tiposaurus.co.uk/2011/04/04/… "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'y est pas) alors il génère une erreur fatale qui arrêtera complètement l'exécution de la page, et aucune sortie ne sera générée. Par contre, si vous incluez () un fichier qui ne peut pas être chargé, cela générera simplement un avertissement et continuez à créer la page. "
stormwild
3
"Ce que vous devez utiliser dépend de la situation; require () est le mieux adapté pour charger des fichiers essentiels pour le reste de la page - par exemple si vous avez un site Web basé sur une base de données, utilisez require () pour inclure un fichier contenant le L'identifiant 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 prévu. "
stormwild
3
<?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. stracene montre même pas que PHP essaie de toucher file.php.
cHao
Contrairement à include (), require () lira toujours le fichier cible, même si la ligne sur laquelle il se trouve ne s'exécute jamais. Si vous souhaitez inclure conditionnellement un fichier, utilisez include (). AND Cependant, si la ligne sur laquelle le require () se produit n'est pas exécutée, aucun des codes du fichier cible ne sera exécuté non plus. Semble dire le contraire, ou suis-je mal compris?
lorless
1
Tous ces commentaires font référence à la version originale de cette réponse avant sa modification. À l'origine, il y avait une réclamation invalide, affirmant que 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.
Kevin Wheeler
181
requirelancera une erreur fatale PHP si le fichier ne peut pas être chargé. (L'exécution s'arrête)
includeproduit un avertissement si le fichier ne peut pas être chargé. (L'exécution continue)
À utiliser includesi 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 requiresignifie 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 settingrequire'not_there';// Example 2.// users see a meaningful error messagetry{
include 'not_there';}catch(Exception $e){
echo "something strange happened!";}
Au niveau de l'inclusion, ce n'est pas un bon endroit pour apprendre que le fichier que vous attendez n'est pas là. Aucun des problèmes de votre exemple n'est de pousser les visiteurs de votre site Web.
Kzqai
0
<?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.
Réponses:
Vous trouverez les différences expliquées dans le manuel PHP détaillé sur la page de
require
:Voir la réponse de @ efritz pour un exemple
la source
<?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 toucherfile.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 :
la source
À 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.la source
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
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
la source
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.
la source
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.
la source