Unterschied zwischen "include" und "require" in PHP
174
Gibt es einen Unterschied zwischen ihnen? Ist ihre Verwendung eine Frage der Präferenz? Ergibt die Verwendung übereinander Vorteile? Was ist besser für die Sicherheit?
Verwenden Sie immer "erfordern". "include" ist so praktisch wie eine elektrische Tür in einer Sauna.
Marco Mariani
2
@MarcoMariani Wie wäre das unpraktisch? Es ist wahrscheinlich klar, ich sehe es einfach nicht. Vielleicht der Dampf?
Austin Burk
Um es einfach auszudrücken: Wenn versehentlich eine 'foo.php'-Datei fehlt, möchte ich so schnell wie möglich wissen, nicht wann eine Funktion aufgerufen wird, die in foo.php hätte sein sollen. Das Ersetzen von include durch require kann häufig Fehler aufdecken. Angenommen, config.php fehlt und die Anwendung wird mit einer Standardkonfiguration ausgeführt. Was ist besser für die Sicherheit? Was die Sauna betrifft, wenn ich drinnen bin und die Tür aus irgendeinem Grund nicht geöffnet wird, mag ich es nicht.
Marco Mariani
Antworten:
148
Die Unterschiede finden Sie im ausführlichen PHP-Handbuch auf der Seite vonrequire :
requireist identisch mit, includeaußer dass bei einem E_COMPILE_ERRORFehler auch ein schwerwiegender Pegelfehler auftritt. Mit anderen Worten, das Skript wird angehalten, während include nur eine Warnung ( E_WARNING) ausgibt, mit der das Skript fortgesetzt werden kann.
tiposaurus.co.uk/2011/04/04/… "Der Hauptunterschied zwischen require () und include () besteht darin, dass wenn Sie () eine Datei benötigen, die nicht geladen werden kann (z. B. wenn sie nicht vorhanden ist) Es wird ein schwerwiegender Fehler generiert, der die Ausführung der Seite vollständig anhält und keine Ausgabe mehr generiert. Wenn Sie dagegen eine Datei einschließen (), die nicht geladen werden kann, wird lediglich eine Warnung und generiert Baue die Seite weiter. "
Stormwild
3
"Welche Sie verwenden sollten, hängt von der jeweiligen Situation ab. Require () eignet sich am besten zum Laden von Dateien, die für den Rest der Seite wichtig sind. Wenn Sie beispielsweise eine datenbankgesteuerte Website haben, verwenden Sie require (), um eine Datei einzuschließen, die die enthält Datenbankanmeldung und Kennwort werden eindeutig der Verwendung von include () vorgezogen. Wenn Sie in dieser Situation include () verwendet haben, werden möglicherweise mehr Warnungen und Fehler generiert, als Sie beabsichtigt hatten. "
Stormwild
3
<?php if (isset($flibbertygibbet)) require 'file.php';scheint diese Antwort völlig falsch aussehen zu lassen. Andernfalls sollte ein schwerwiegender Fehler angezeigt werden, obwohl die Bedingung nicht erfüllt ist. stracezeigt nicht einmal PHP, das versucht zu berühren file.php.
CHao
Im Gegensatz zu include () liest require () immer die Zieldatei ein, auch wenn die Zeile, in der es sich befindet, nie ausgeführt wird. Wenn Sie eine Datei bedingt einschließen möchten, verwenden Sie include (). UND Wenn jedoch die Zeile, in der require () auftritt, nicht ausgeführt wird, wird auch kein Code in der Zieldatei ausgeführt. Scheint das Gegenteil zu sagen, oder verstehe ich das falsch?
Lorless
1
Alle diese Kommentare beziehen sich auf die Originalversion dieser Antwort, bevor sie bearbeitet wurde. Ursprünglich gab es eine ungültige Behauptung, die behauptete, if (false) require 'file.php';dass 'file.php' geladen (aber nicht ausgeführt) würde. TLDR ignoriert alle diese Kommentare.
Kevin Wheeler
181
requirewird einen schwerwiegenden PHP-Fehler auslösen, wenn die Datei nicht geladen werden kann. (Ausführung stoppt)
includeerzeugt eine Warnung, wenn die Datei nicht geladen werden kann. (Ausführung wird fortgesetzt)
Verwenden includeSie diese Option, wenn Sie nichts dagegen haben, dass Ihr Skript fortgesetzt wird, ohne die Datei zu laden (falls sie nicht vorhanden ist usw.) und Sie (obwohl Sie dies nicht sollten) mit einer angezeigten Warnfehlermeldung leben können.
Verwenden requirebedeutet, dass Ihr Skript angehalten wird, wenn es die angegebene Datei nicht laden kann, und einen schwerwiegenden Fehler auslöst.
Wie andere betonten, besteht der einzige Unterschied darin, dass erforderlich einen schwerwiegenden Fehler auslöst und Folgendes enthält: eine auffangbare Warnung. Was die Verwendung betrifft, ist mein Rat, sich an die Einbeziehung zu halten. Warum? weil Sie eine Warnung abfangen und den Endbenutzern ein aussagekräftiges Feedback geben können. Erwägen
// 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!";}
Auf der Einschlussstufe ist es kein guter Ort, um zu erfahren, dass die erwartete Datei nicht vorhanden ist. Kein Problem in Ihrem Beispiel ist eines, das Ihre Website-Betrachter abschreckt.
Kzqai
0
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";?>
Ein sehr einfaches praktisches Beispiel mit Code.
Das erste Echo wird angezeigt. Unabhängig davon, ob Sie include oder require verwenden, da die Läufe vor include oder erforderlich sind.
Um das Ergebnis zu überprüfen, geben Sie in der zweiten Zeile eines Codes absichtlich den falschen Pfad zur Datei an oder machen Sie einen Fehler im Dateinamen. Somit hängt das zweite Echo, das angezeigt werden soll oder nicht, vollständig davon ab, ob Sie require oder include verwenden .
Wenn Sie require verwenden, wird das zweite Echo nicht ausgeführt. Wenn Sie jedoch include verwenden , unabhängig davon, welcher Fehler auftritt, wird auch das Ergebnis des zweiten Echos angezeigt.
Im Falle, dass Include Program nicht beendet wird und eine Warnung im Browser angezeigt wird, wird das Require-Programm beendet und zeigt einen schwerwiegenden Fehler an, wenn die Datei nicht gefunden wird.
Antworten:
Die Unterschiede finden Sie im ausführlichen PHP-Handbuch auf der Seite von
require
:Siehe @ Antwort des efritz für ein Beispiel
quelle
<?php if (isset($flibbertygibbet)) require 'file.php';
scheint diese Antwort völlig falsch aussehen zu lassen. Andernfalls sollte ein schwerwiegender Fehler angezeigt werden, obwohl die Bedingung nicht erfüllt ist.strace
zeigt nicht einmal PHP, das versucht zu berührenfile.php
.if (false) require 'file.php';
dass 'file.php' geladen (aber nicht ausgeführt) würde. TLDR ignoriert alle diese Kommentare.require
wird einen schwerwiegenden PHP-Fehler auslösen, wenn die Datei nicht geladen werden kann. (Ausführung stoppt)include
erzeugt eine Warnung, wenn die Datei nicht geladen werden kann. (Ausführung wird fortgesetzt)Hier ist eine schöne Illustration von Include und erfordern Unterschied :
quelle
Verwenden
include
Sie diese Option, wenn Sie nichts dagegen haben, dass Ihr Skript fortgesetzt wird, ohne die Datei zu laden (falls sie nicht vorhanden ist usw.) und Sie (obwohl Sie dies nicht sollten) mit einer angezeigten Warnfehlermeldung leben können.Verwenden
require
bedeutet, dass Ihr Skript angehalten wird, wenn es die angegebene Datei nicht laden kann, und einen schwerwiegenden Fehler auslöst.quelle
Wie andere betonten, besteht der einzige Unterschied darin, dass erforderlich einen schwerwiegenden Fehler auslöst und Folgendes enthält: eine auffangbare Warnung. Was die Verwendung betrifft, ist mein Rat, sich an die Einbeziehung zu halten. Warum? weil Sie eine Warnung abfangen und den Endbenutzern ein aussagekräftiges Feedback geben können. Erwägen
Hinweis: Um beispielsweise 2 zu funktionieren, müssen Sie einen Fehler-zu-Ausnahmen-Handler installieren, wie hier beschrieben. Http://www.php.net/manual/en/class.errorexception.php
quelle
Ein sehr einfaches praktisches Beispiel mit Code. Das erste Echo wird angezeigt. Unabhängig davon, ob Sie include oder require verwenden, da die Läufe vor include oder erforderlich sind.
Um das Ergebnis zu überprüfen, geben Sie in der zweiten Zeile eines Codes absichtlich den falschen Pfad zur Datei an oder machen Sie einen Fehler im Dateinamen. Somit hängt das zweite Echo, das angezeigt werden soll oder nicht, vollständig davon ab, ob Sie require oder include verwenden .
Wenn Sie require verwenden, wird das zweite Echo nicht ausgeführt. Wenn Sie jedoch include verwenden , unabhängig davon, welcher Fehler auftritt, wird auch das Ergebnis des zweiten Echos angezeigt.
quelle
Im Falle, dass Include Program nicht beendet wird und eine Warnung im Browser angezeigt wird, wird das Require-Programm beendet und zeigt einen schwerwiegenden Fehler an, wenn die Datei nicht gefunden wird.
quelle