web-dev-qa-db-fra.com

Différence entre require, include, require_once et include_once?

En PHP:

  • Quand devrais-je utiliser require vs. include?
  • Quand devrais-je utiliser require_once vs. include_once?
1141
Scott B

Il existe également require et include_once.

Donc, votre question devrait être ...

  1. Quand devrais-je utiliser require vs. include?
  2. Quand devrais-je utiliser require_once vs. require

La réponse à 1 est décrite ici .

La fonction require () est identique à include (), sauf qu'elle traite les erreurs différemment. Si une erreur se produit, la fonction include () génère un avertissement, mais le script continue son exécution. Require () génère une erreur fatale et le script s'arrête.

La réponse à 2 peut être trouvée ici .

L'instruction require_once () est identique à require () sauf que PHP vérifiera si le fichier a déjà été inclus et, le cas échéant, ne l'inclut pas à nouveau.

1347
Leo

Utilisation

  • nécessite
    lorsque le fichier est requis par votre application, par ex. un modèle de message important ou un fichier contenant des variables de configuration sans lesquelles l'application serait cassée.

  • require_once
    lorsque le fichier contient un contenu susceptible de générer une erreur lors de l’inclusion ultérieure, par ex. function important() { /* important code */} est absolument nécessaire dans votre application, mais étant donné que les fonctions ne peuvent pas être redéclarées, vous ne devez plus les inclure.

  • include lorsque le fichier n'est pas requis et que le flux d'applications doit continuer lorsqu'il n'est pas trouvé, par exemple.
    idéal pour les modèles référençant des variables de la portée actuelle ou de quelque chose

  • include_once
    dépendances facultatives susceptibles de générer des erreurs lors du chargement ultérieur ou éventuellement l'inclusion de fichiers distants que vous ne souhaitez pas faire deux fois en raison de la surcharge HTTP

Mais au fond, c'est à vous de choisir quand.

384
Gordon

Ma suggestion est simplement d'utiliser require_once 99,9% du temps.

Utiliser require ou include implique que votre code ne soit pas réutilisable ailleurs, c’est-à-dire que les scripts que vous extrayez réellement exécutent code au lieu de rendre disponible une classe ou des bibliothèques de fonctions.

Si vous avez besoin/y compris du code qui s'exécute sur-le-champ, c'est du code de procédure et vous devez connaître un nouveau paradigme . Comme la programmation orientée objet, la programmation fonctionnelle ou la programmation fonctionnelle.

Si vous faites déjà OO ou une programmation fonctionnelle, utiliser include_once va généralement être différer où vous trouvez des bugs/erreurs . Voulez-vous savoir que la fonction do_cool_stuff() n'est pas disponible lorsque vous souhaitez l'appeler ultérieurement, ou au moment où vous vous attendez à ce qu'elle soit disponible en exigeant la bibliothèque? En règle générale, il est préférable de savoir immédiatement si quelque chose dont vous avez besoin n'est pas disponible, utilisez donc simplement require_once.

Alternativement, dans la POO moderne, il suffit de chargement automatique vos classes lors de leur utilisation.

292
Kzqai

Différence entre les fonctions _once et les fonctions sans _once: le code sans _once sera inclus à nouveau, tandis que avec les fonctions _once PHP conserve la trace des fichiers inclus et l'inclut une seule fois.

Différence entre require et include: Si un fichier requis n’est pas trouvé, PHP émettra une erreur fatale alors que pour include, seul un avertissement sera émis.

33
Sebastian

include() émettra un avertissement s'il ne peut pas inclure le fichier, mais le reste du script sera exécuté.

require() lance un E_COMPILE_ERROR et arrête le script s'il ne peut pas inclure le fichier.

Les fonctions include_once() et require_once() n'incluent pas le fichier une fois s'il a déjà été inclus.

Voir les pages de documentation suivantes:

28
Polynomial

Chaque fois que vous utilisez require_once() peut être utilisé dans un fichier pour inclure un autre fichier lorsque vous avez besoin du fichier appelé une seule fois dans le fichier actuel. Ici, dans l'exemple, j'ai un test1.php.

<?php  
echo "today is:".date("Y-m-d");  
?>  

et dans un autre fichier que j'ai nommé test2.php

<?php  
require_once('test1.php');  
require_once('test1.php');  
?>

pendant que vous regardez le m nécessitant le fichier test1 deux fois mais le fichier inclura le test1 une fois et pour appeler la deuxième fois, il sera ignoré. Et sans arrêter affichera la sortie une seule fois.

Chaque fois que vous utilisez 'include_once () `peut être utilisé dans un fichier pour inclure un autre fichier lorsque vous avez besoin du fichier appelé plusieurs fois dans le fichier actuel. Ici, dans l'exemple, j'ai un fichier nommé test3.php.

<?php  
echo "today is:".date("Y-m-d");  
?> 

Et dans un autre fichier que j'ai nommé test4.php

<?php  
include_once('test3.php');  
include_once('test3.php');  
?>

pendant que vous regardez, le m, y compris le fichier test3, inclura le fichier une seule fois mais interrompra la poursuite de l’exécution.

21
AliMohsin

Utilisez "include" pour les modèles réutilisables PHP . Utilisez "require" pour les bibliothèques requises.

"* _once" est agréable, car il vérifie si le fichier est déjà chargé ou non, mais cela n'a de sens que pour moi dans "require_once".

18
mo.

La différence réside dans l'erreur générée par les commandes. Avec require, le fichier que vous voulez utiliser est vraiment requis et génère donc un E_ERROR s'il n'est pas trouvé.

require() est identique à include() sauf qu'en cas d'échec, une erreur fatale de niveau E_ERROR est également générée.

include ne génère une erreur E_WARNING que si elle échoue et est plus ou moins silencieuse.

Utilisez-le donc si le fichier est requis pour que le code restant fonctionne et si vous voulez que le script échoue, le fichier n'est pas disponible.


Pour *_once():

include_once() peut être utilisé dans les cas où le même fichier peut être inclus et évalué plusieurs fois au cours d'une exécution particulière d'un script. Dans ce cas, cela peut aider à éviter des problèmes tels que la redéfinition de fonctions, la réaffectation de valeurs de variables, etc.

Il en va de même pour require_once() bien sûr.


Référence: require() , include_once()

15
Felix Kling

Une réponse après 7 ans pour 2018

Cette question a été posée il y a sept ans et aucune des réponses n'apporte une aide pratique à la question. Dans la programmation moderne PHP, vous utilisez principalement required_once une seule fois pour inclure votre classe d'autoloader (composeur automatique), et toutes vos classes et fonctions seront chargées (les fichiers de fonctions doivent être ajoutés explicitement fichier composer.json disponible dans tous les autres fichiers). Si, pour une raison quelconque, votre classe ne peut pas être chargée à partir de l'autoloader, vous utilisez require_once pour le charger.

Ces jours-ci, vous utilisez require uniquement pour scinder un gros morceau d'un fichier PHP. C'est principalement une définition de grand tableau. Dans ce cas, vous n'utilisez que require pas require_once.

 <?php
// arr.php
return ['x'=>'y'];

 <?php
//main.php
$arr= require 'arry.php'

Si le fichier que vous souhaitez utiliser contient quelque chose d'exécutable ou déclare des variables, vous devez presque toujours utiliser require, car si vous utilisez require_once à un autre endroit, votre code ne sera pas exécuté et/ou votre les variables ne s'initieront pas en silence, ce qui provoquera des bugs absolument difficiles à identifier.

Il n'y a pas de cas d'utilisation pratique pour include et include_once vraiment.

15
PHPst

Vous devez conserver les définitions de classe et de fonction organisées dans des fichiers.

Utilisez require_once() pour charger dépendances (classes, fonctions, constantes).

Utilisez require() pour charger () fichiers de type modèle .

Utilisez include_once() pour charger dépendances optionnelles (classes, fonctions, constantes).

Utilisez include() pour charger () fichiers facultatifs de type modèle .

12

Avec require, le fichier doit exister, sinon, une erreur s'affichera; alors que avec include - si le fichier n'existe pas, la page continuera à se charger.

9
Brian

Exiger des pièces critiques, comme une autorisation et inclure toutes les autres.

Les inclus multiples sont juste une très mauvaise conception et doivent absolument être évités. Donc, peu importe.

8
Your Common Sense

Include / Require vous pouvez inclure le même fichier plusieurs fois.

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

require_once / include_once

est identique à include/require sauf que PHP vérifie si le fichier a déjà été inclus, et si c'est le cas, ne l'incluez pas à nouveau.

7
Marcx

include() générera un avertissement lorsqu'il ne trouvera pas de fichier, mais require_once() générera une erreur fatale.

Une autre chose est si le fichier est inclus avant. Alors require_once() ne l'inclura plus.

5
Rukmi Patel

À l'âge de PSR-0 / PSR-4 chargeurs automatiques, il peut être totalement inutile d'utiliser l'une de ces instructions si vous avez simplement besoin de rendre certaines fonctions/classes disponibles pour votre code (bien sûr, vous devez toujours utiliser require_once l'autochargeur lui-même dans vos fichiers bootstrap et include si vous utilisez toujours PHP en tant que moteur de modèle).

4
mp31415

J'utilisais la fonction ci-dessous:

function doSomething() {
    require_once(xyz.php);
    ....
}

Il y avait des valeurs constantes déclarées dans xyz.php.

Je dois appeler cette fonction doSomething () depuis un autre fichier script PHP.

Mais j’ai observé un comportement en appelant cette fonction dans une boucle: pour la première itération, doSomething () obtenait des valeurs constantes dans xyz.php, mais plus tard, chaque itération doSomething() n’était pas en mesure d’obtenir les valeurs constantes déclarées dans xyz.php.

J'ai résolu mon problème en passant de require_once() à include(), le code doSomething() mis à jour est le suivant:

function doSomething() {
    include(xyz.php);
    ....
}

Désormais, chaque appel d’itération à doSomething() obtient les valeurs constantes définies dans xyz.php.

4
pcj

Du manuel :

require() est identique à include() sauf 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 que include() n'émet qu'un avertissement (E_WARNING) qui permet au script de continuer.

Il en va de même pour les variantes _once().

4
Ferdinand Beyer

  1. Quand doit-on utiliser require ou include?

    Les fonctions require et include effectuent la même tâche, c’est-à-dire inclut et évalue le fichier spécifié, mais la différence est require provoquera une erreur fatale lorsque l’emplacement du fichier spécifié est invalide ou pour toute erreur alors que include générera un avertissement et poursuivra l’exécution du code. .

    Vous pouvez donc utiliser la fonction require dans le cas où le fichier que vous essayez d'inclure est le cœur du système et peut avoir un impact considérable sur le reste du code et vous pouvez utiliser la fonction include quand le fichier que vous essayez d'inclure est un simple fichier contenant du code moins important.

    Et ma recommandation personnelle (pour le code le moins important) est d’utiliser la fonction require partout dans votre code alors qu’elle est en phase de développement afin que vous puissiez déboguer le code et remplacer plus tard toutes les fonctions require par include avant de le produire. si vous ratez un bogue, cela n'affectera pas l'utilisateur final et le reste du code s'exécutera correctement ...

  2. Quand doit-on utiliser require_once ou require?

    La différence fondamentale entre require et require_once est require_once vérifiera si le fichier est déjà inclus ou non s'il est déjà inclus, alors il n'inclura pas le fichier alors que la fonction require l'inclura indépendamment du fichier. si le fichier est déjà inclus ou non.

    Ainsi, dans les cas où vous souhaitez inclure un morceau de code à plusieurs reprises, utilisez la fonction require alors que si vous souhaitez inclure du code une seule fois dans votre code, utilisez require_once.

3
Akshay Khale
  1. Utilisez require function lorsque vous devez charger une classe, une fonction ou une dépendance.

  2. Utilisez la fonction include lorsque vous souhaitez charger un fichier de style modèle

Si vous êtes toujours confus, utilisez simplement require_once pour toujours.

2
James Wong

une chose que j'ai remarquée, lors de l'utilisation de include, je ne peux accéder qu'aux fonctions des fichiers inclus à partir du fichier qui les inclut. Avec require_once, je peux exécuter cette fonction dans un deuxième fichier required_once.

aussi: je recommande d'ajouter

if(file_exists($RequiredFile)){
    require_once($RequiredFile);
}else{
  die('Error: File Does Not Exist');
}

Parce que quand require_once tue la page, il peut parfois faire écho au répertoire des fichiers de votre site Web

Voici une fonction personnalisée que j'ai créée pour exiger des fichiers:

function addFile($file, $type = 'php', $important=false){
    //site-content is a directory where I store all the files that I plan to require_once
    //the site-content directory has "deny from all" in its .htaccess file to block direct connections
    if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
        //!is_dir checks that the file is not a folder
        require_once('site-content/'.$file.'.'.$type);
        return 'site-content/'.$file.'.'.$type;
    }else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
        //if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
        require_once('site-content/'.$file);
        return 'site-content/'.$file;
    }else if($important){
        //if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
        die('Server Error: Files Missing');
        return false;
    }else{
        //the function returns false if the file does not exist, so you can check if your functions were successfully added
        return false;
    }
}

exemple d'utilisation:

$success = addFile('functions/common');

if($success){
    commonFunction();
}else{
    fallbackFunction();
}
1
SwiftNinjaPro

Ils sont tous des moyens d'inclure des fichiers.

Exiger signifie qu'il en a besoin. Require_once signifie qu'il en aura besoin, mais ne l'exige qu'une fois. Inclure signifie qu’il inclura un fichier mais qu’il n’a pas besoin de lui pour continuer.

Exemples:

Require 'filename'
Require_once 'filename'
Include 'filename'

Il existe également une fonction include_once qui inclut un fichier une fois.

Include_once 'filename'

N’utilisez pas de lettres majuscules lorsque j’ai tapé sur mon téléphone.

Fondamentalement, si vous avez besoin d’un mauvais chemin, PHP renvoie une erreur fatale et la fonction d’arrêt est appelée. Toutefois, lorsque vous incluez un mauvais chemin, PHP continue l’exécution, mais ne fait que afficher un avertissement que le fichier n'existe pas.

À partir du mot anglais requis, PHP indique que l'exécution de la page ou du fichier dépend du fichier requis.

D'après mon expérience, il est normal d'exiger des fichiers importants tels que des fichiers de configuration, des classes de base de données et d'autres utilitaires importants.

0
Akintunde-Rotimi