it-swarm.com.de

Unterschied zwischen require, include, require_once und include_once?

In PHP:

  • Wann sollte ich require vs. include verwenden?
  • Wann sollte ich require_once vs. include_once verwenden?
1141
Scott B

Es gibt auch require und include_once.

So sollte Ihre Frage sein ...

  1. Wann sollte ich require vs. include verwenden?
  2. Wann sollte ich require_once vs. require verwenden?

Die Antwort auf 1 wird beschrieben hier .

Die Funktion require () ist identisch mit include (), mit der Ausnahme, dass Fehler unterschiedlich behandelt werden. Wenn ein Fehler auftritt, generiert die Funktion include () eine Warnung, das Skript setzt die Ausführung jedoch fort. Mit require () wird ein schwerwiegender Fehler generiert und das Skript beendet.

Die Antwort auf 2 ist hier .

Die require_once () - Anweisung ist identisch mit require (), mit der Ausnahme, dass PHP überprüft, ob die Datei bereits enthalten ist, und in diesem Fall sie nicht erneut einschließt (erfordert).

1347
Leo

Verwenden

  • erforderlich
    , wenn die Datei von Ihrer Anwendung benötigt wird , z. Eine wichtige Nachrichtenvorlage oder eine Datei mit Konfigurationsvariablen, ohne die die App nicht funktioniert.

  • require_once
    wenn die Datei Inhalt enthält, der bei der nachfolgenden Aufnahme einen Fehler verursachen würde, z. function important() { /* important code */} wird in Ihrer Anwendung auf jeden Fall benötigt, da Funktionen jedoch nicht neu deklariert werden können, sollten sie nicht erneut einbezogen werden.

  • include wenn die Datei nicht benötigt wird und der Anwendungsfluss fortgesetzt werden soll, wenn sie nicht gefunden wird, z.
    ideal für Vorlagen, die auf Variablen aus dem aktuellen Bereich verweisen oder so

  • include_once
    optionale Abhängigkeiten, die beim anschließenden Laden zu Fehlern oder möglicherweise zum Einbeziehen von Remotedateien führen, die aufgrund des HTTP-Overheads nicht zweimal auftreten sollen

Aber im Grunde liegt es an Ihnen, wann Sie welche verwenden.

384
Gordon

Mein Vorschlag ist, nur require_once 99,9% der Zeit zu verwenden.

Die Verwendung von require oder include impliziert stattdessen, dass Ihr Code an keiner anderen Stelle wiederverwendbar ist, dh dass die Skripte, die Sie aufrufen, tatsächlich ausgeführt werden Code, anstatt eine Klasse oder einige Funktionsbibliotheken verfügbar zu machen .

Wenn Sie Code benötigen/einschließen, der vor Ort ausgeführt wird, ist dies prozeduraler Code, und Sie müssen ein neues Paradigma kennenlernen . Wie objektorientierte Programmierung, funktionsbasierte Programmierung oder funktionale Programmierung.

Wenn Sie bereits OO oder eine Funktionsprogrammierung durchführen, verzögert die Verwendung von include_once in den meisten Fällen die Suche nach Fehlern im Stapel . Möchten Sie wissen, dass die Funktion do_cool_stuff() nicht verfügbar ist, wenn Sie sie später aufrufen, oder in dem Moment, in dem Sie erwarten, dass sie verfügbar ist von der Bibliothek verlangen? Im Allgemeinen ist es am besten, sofort zu wissen, ob etwas, das Sie benötigen und erwarten, nicht verfügbar ist. Verwenden Sie daher einfach require_once.

Alternativ können Sie in der modernen OOP auch einfach Autoload Ihre Klassen bei Verwendung verwenden.

292
Kzqai

Unterschied zwischen _once-Funktionen und ohne _once-Funktionen: ohne _once-Code wird erneut eingeschlossen, während mit _once-Funktionen PHP die eingeschlossenen Dateien verfolgt und nur einmal einschließt.

Unterschied zwischen require und include: Wenn eine erforderliche Datei nicht gefunden wird, gibt PHP einen schwerwiegenden Fehler aus, während für include nur eine Warnung ausgegeben wird.

33
Sebastian

include() gibt eine Warnung aus, wenn die Datei nicht enthalten sein kann, der Rest des Skripts jedoch ausgeführt wird.

require() wirft einen E_COMPILE_ERROR und stoppt das Skript, wenn es die Datei nicht enthalten kann.

Die Funktionen include_once() und require_once() enthalten die Datei nicht ein zweites Mal, wenn sie bereits enthalten ist.

Siehe die folgenden Dokumentationsseiten:

28
Polynomial

Immer wenn Sie require_once() verwenden, können Sie in einer Datei eine andere Datei einfügen, wenn Sie die aufgerufene Datei nur ein einziges Mal in der aktuellen Datei benötigen. Hier im Beispiel habe ich eine test1.php.

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

und in einer anderen Datei, die ich test2.php genannt habe

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

wenn Sie sich das m ansehen, das die Datei test1 zweimal benötigt, die Datei jedoch die Datei test1 einmal enthält, wird dies beim zweiten Aufruf ignoriert. Und ohne anzuhalten wird die Ausgabe ein einziges Mal angezeigt.

Wenn Sie "include_once ()" verwenden, können Sie in einer Datei eine andere Datei einfügen, wenn Sie die aufgerufene Datei mehr als einmal in der aktuellen Datei benötigen. Hier im Beispiel habe ich eine Datei mit dem Namen test3.php.

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

Und in einer anderen Datei, die ich test4.php genannt habe

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

wenn Sie das m einschließlich der test3-Datei ansehen, wird die Datei ein einziges Mal einbezogen, die weitere Ausführung wird jedoch angehalten.

21
AliMohsin

Verwenden Sie "include" für wiederverwendbare PHP Vorlagen. Verwenden Sie "require" für benötigte Bibliotheken.

"* _once" ist nett, weil es prüft, ob die Datei bereits geladen ist oder nicht, aber es macht nur Sinn für mich in "require_once".

18
mo.

Der Unterschied liegt in dem Fehler, den die Befehle erzeugen. Mit require ist die Datei, die Sie verwenden möchten, wirklich erforderlich und generiert daher einen E_ERROR, wenn er nicht gefunden wird.

require() ist identisch mit include(), außer dass bei einem Fehler auch ein schwerwiegender Fehler der Ebene E_ERROR ausgegeben wird.

include erzeugt nur dann einen E_WARNING Fehler, wenn er mehr oder weniger lautlos ausfällt.

Verwenden Sie diese Option, wenn die Datei benötigt wird, damit der verbleibende Code funktioniert, und Sie möchten, dass das Skript fehlschlägt. Die Datei ist nicht verfügbar.


Für *_once():

include_once() kann in Fällen verwendet werden, in denen dieselbe Datei während einer bestimmten Ausführung eines Skripts mehrmals eingeschlossen und ausgewertet werden kann. In diesem Fall können Probleme wie Funktionsneudefinitionen, Zuweisungen von Variablenwerten usw. vermieden werden.

Gleiches gilt natürlich für require_once().


Referenz: require() , include_once()

15
Felix Kling

Eine Antwort nach 7 Jahren für 2018

Diese Frage wurde vor sieben Jahren gestellt, und keine der Antworten bietet praktische Hilfe für die Frage. In der modernen Programmierung verwenden Sie PHP hauptsächlich einmal required_once, um Ihre Autoloader-Klasse einzuschließen (Composer-Autoloader häufig), und es werden alle Ihre Klassen und Funktionen geladen (Funktionsdateien müssen explizit hinzugefügt werden) in composer.json Datei, die in allen anderen Dateien verfügbar sein soll). Wenn Ihre Klasse aus irgendeinem Grund nicht vom Autoloader geladen werden kann, verwenden Sie require_once, um sie zu laden.

In diesen Tagen verwenden Sie require nur, um einen großen Teil einer PHP -Datei zu teilen. Dies ist hauptsächlich eine große Array-Definition. In solchen Fällen verwenden Sie nur require und nicht require_once.

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

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

Wenn die Datei, die Sie verwenden möchten, eine ausführbare Datei enthält oder einige Variablen deklariert, müssen Sie fast immer require verwenden, denn wenn Sie require_once an einer anderen Stelle verwenden, wird Ihr Code nicht ausgeführt und/oder Ihr Code wird nicht ausgeführt Variablen werden nicht unbemerkt gestartet, was zu Fehlern führt, die absolut schwer zu lokalisieren sind.

Es gibt keinen praktischen Anwendungsfall für include und include_once.

15
PHPst

Sie sollten Klassen- und Funktionsdefinitionen in Dateien organisieren.

Verwenden Sie require_once(), um Abhängigkeiten (Klassen, Funktionen, Konstanten) zu laden.

Verwenden Sie require(), um template-ähnliche Dateien zu laden .

Verwenden Sie include_once(), um optionale Abhängigkeiten (Klassen, Funktionen, Konstanten) zu laden.

Verwenden Sie include(), um optionale vorlagenähnliche Dateien zu laden.

12

Mit require muss die Datei existieren, wenn nicht, wird ein Fehler angezeigt; wohingegen mit include - wenn die Datei nicht existiert, wird die Seite weiter geladen.

9
Brian

Benötigen Sie wichtige Teile, wie die Autorisierung, und schließen Sie alle anderen ein.

Multiple Includes sind nur sehr schlecht gestaltet und müssen unbedingt vermieden werden. Also spielt * _once keine Rolle.

8

Include / Require Sie können dieselbe Datei auch mehrmals einschließen:

require () ist identisch mit include (), es sei denn, bei einem Fehler wird auch ein schwerwiegender E_COMPILE_ERROR-Level-Fehler erzeugt. Mit anderen Worten, das Skript wird angehalten, während include () nur eine Warnung (E_WARNING) ausgibt, mit der das Skript fortgesetzt werden kann.

require_once / include_once

ist identisch mit include/require, außer dass PHP überprüft, ob die Datei bereits enthalten ist, und falls ja, sie nicht erneut einbezieht (erfordert).

7
Marcx

include() generiert eine Warnung, wenn keine Datei gefunden wird, require_once() generiert jedoch einen schwerwiegenden Fehler.

Eine andere Sache ist, wenn Datei vor enthalten ist. Dann wird require_once() es nicht wieder aufnehmen.

5
Rukmi Patel

Im Zeitalter von PSR-0 / PSR-4 Autoloadern kann es völlig unnötig sein, eine der Anweisungen zu verwenden, wenn Sie lediglich einige Funktionen/Klassen für Ihren Code verfügbar machen müssen (natürlich müssen Sie noch require_once Autoloader selbst in Ihrer bootstrap -Datei und include -Vorlagen, wenn Sie noch PHP als Vorlagen-Engine verwenden).

4
mp31415

Ich habe die folgende Funktion verwendet:

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

In xyz.php wurden konstante Werte deklariert.

Ich muss diese Funktion doSomething () aus einer anderen PHP Skriptdatei aufrufen.

Beim Aufrufen dieser Funktion in einer Schleife habe ich jedoch ein Verhalten beobachtet, da bei der ersten Iteration von doSomething () konstante Werte innerhalb von xyz.php abgerufen wurden, später jedoch bei jeder Iteration von doSomething() nicht die in xyz.php deklarierten konstanten Werte abgerufen werden konnten.

Ich habe mein Problem gelöst, indem ich von require_once() zu include() gewechselt habe. Der aktualisierte doSomething() Code lautet wie folgt:

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

Jetzt erhält jeder Iterationsaufruf von doSomething() die in xyz.php definierten konstanten Werte.

4
pcj

Aus dem manuell :

require() ist identisch mit include(), außer dass bei einem Fehler ein schwerwiegender Fehler auf der Ebene E_COMPILE_ERROR auftritt. Mit anderen Worten, das Skript wird angehalten, während include() nur eine Warnung ausgibt (E_WARNING), mit der das Skript fortgesetzt werden kann.

Gleiches gilt für die Varianten _once().

4
Ferdinand Beyer

  1. Wann sollte man require oder include verwenden?

    Die Funktionen require und include führen dieselbe Aufgabe aus, dh sie schließen die angegebene Datei ein und werten sie aus. Der Unterschied ist jedoch, dass require einen schwerwiegenden Fehler verursacht, wenn der angegebene Dateispeicherort ungültig ist oder wenn ein Fehler vorliegt, während include eine Warnung generiert und die Codeausführung fortsetzt .

    Daher können Sie die Funktion require in dem Fall verwenden, in dem die Datei, die Sie einschließen möchten, das Herzstück des Systems ist und eine erhebliche Auswirkung auf den Rest des Codes hat. Sie können dann die Funktion include verwenden Die Datei, die Sie einschließen möchten, ist eine einfache Datei, die weniger wichtigen Code enthält.

    Und meine persönliche Empfehlung (für weniger wichtigen Code) ist, dass Sie die Funktion require überall in Ihrem Code verwenden, während er sich in der Entwicklungsphase befindet, sodass Sie den Code debuggen und später alle Funktionen von require durch die Funktion include ersetzen können, bevor Sie ihn in die Produktion verschieben Wenn Sie Fehler übersehen, hat dies keine Auswirkungen auf den Endbenutzer und der Rest des Codes wird ordnungsgemäß ausgeführt.

  2. Wann sollte man require_once oder require verwenden?

    Der grundlegende Unterschied zwischen require und require_once ist require_once prüft, ob die Datei bereits enthalten ist oder nicht, wenn sie bereits enthalten ist, dann wird die Datei nicht enthalten, wohingegen die Funktion require die Datei unabhängig davon enthält ob Datei bereits enthalten ist oder nicht.

    Wenn Sie also immer wieder Code einfügen möchten, verwenden Sie die Funktion require. Wenn Sie Code nur einmal in den Code einfügen möchten, verwenden Sie require_once.

3
Akshay Khale
  1. Verwenden Sie require function, wenn Sie eine Klasse, Funktion oder Abhängigkeit laden müssen.

  2. Verwenden Sie die Funktion include, wenn Sie eine Datei mit Vorlagenstil laden möchten

Wenn Sie immer noch verwirrt sind, verwenden Sie einfach require_once für alle Zeiten.

2
James Wong

eines ist mir aufgefallen, wenn ich include verwende, kann ich nur von der Datei, in der es enthalten ist, auf die Funktionen der enthaltenen Dateien zugreifen. Mit require_once kann ich diese Funktion in einer zweiten required_once-Datei ausführen.

auch: ich empfehle hinzuzufügen

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

Denn wenn require_once die Seite beendet, kann es vorkommen, dass das Verzeichnis Ihrer Website-Dateien wiedergegeben wird

Hier ist eine benutzerdefinierte Funktion, die ich gemacht habe, um Dateien zu benötigen:

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;
    }
}

anwendungsbeispiel:

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

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

Sie sind alle Möglichkeiten, Dateien einzuschließen.

Benötigen heißt, es braucht es. Require_once bedeutet, dass es benötigt wird, es jedoch nur einmal benötigt wird. Einschließen bedeutet, dass eine Datei eingeschlossen wird, diese zum Fortfahren jedoch nicht benötigt wird.

Beispiele:

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

Es gibt auch eine include_once-Funktion, die eine Datei einmal enthält.

Include_once 'filename'

Verwenden Sie keine Großbuchstaben, während Sie von meinem Telefon aus tippen.

Wenn Sie einen falschen Pfad benötigen, löst PHP einen schwerwiegenden Fehler aus, und die Shutdown-Funktion wird aufgerufen. Wenn Sie jedoch einen falschen Pfad angeben, setzt PHP die Ausführung fort, dies jedoch nur Eine Warnung anzeigen, dass die Datei nicht existiert.

Aus dem englischen Wort require, PHP geht hervor, dass die Ausführung der Seite oder Datei von der benötigten Datei abhängt.

Nach meiner Erfahrung ist es normal, wichtige Dateien wie Konfigurationsdateien, Datenbankklassen und andere wichtige Dienstprogramme zu benötigen.

0