Unterschied zwischen require und include

Begonnen von haraldos, 31. März 2005, 08:26:17

Vorheriges Thema - Nächstes Thema

haraldos

Hallo,
was require und include grundsätzlich bewirken ist mir zwar bekannt, weil zigmal benutzt. Allerdings ist mir der genaue Unterschied zwischen den beiden nicht wirklich klar...
Ist es richtig dass bei fehlender Include Datei keine Fehlermeldung kommt, bei fehlender Require allerdings schon? Und was genau hat es z.b. mit \"require_once\" auf sich? Gibts das auch bei includes?
Danke und Gruß, haraldos
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">


mahe

require() und include() sind in jeder Hinsicht gleichwertig mit der einen Ausnahme: der Umgang mit Fehlern. include() erzeugt ein Warning während require() in einem  Fatal Error endet. Mit anderen Worten: scheuen Sie sich nicht, require() zu benutzen, wenn Sie möchten, dass eine fehlende Datei die Ausführung ihres Skripts beendet. include() verhält sich anders, ihr Skript wird weiterhin ausgeführt. Stellen Sie außerdem sicher, dass Sie einen gültigen include_path gesetzt haben.[/quote] http://www.php.net/require\" rel=\"external nofollow\">http://www.php.net/require /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
Die anderen 2 Punkte die bei dem Link von IndoorJo beschrieben werden kann ich nicht nachvollziehen, zumal der Effekt bei mir noch nie aufgetreten ist ...
require_once()/include_once():
Vom Prinzip her genau das gleiche wie include()/require(), nur mit dem Unterschied dass die angegebene Datei nur einmal im Script eingebunden wird.
Sprich würdest du zu Beginn eines Script die world.php in der echo \'Hello World!\'; steht per include_once()/require_once() einbinden und dann nochmal am Ende des Scripts wird diese nur zu Beginn eingebunden /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


gerde

Der dritte Unterschied bezieht sich auf die Fehlerbehandlungsroutine der beiden Funktionen. Während include() bei einem Aufruf einer nicht existierenden Datei lediglich eine Warnung ausgibt, unterbricht require() komplett die Ausführung des Skriptes und gibt einen Fehler aus. [/quote]
Kann es sein, dass man das in der php.ini angeben kann, wie require() beim \"Nichtfinden\" reagiert?

Es gibt nur einen Gott: belafarinrod! http://www.quakefans.de/images/smilies/ugly.gif\" alt=\"ugly.gif\">


haraldos

Vielen Dank schon mal!  /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
Während include() bei einem Aufruf einer nicht existierenden Datei lediglich eine Warnung ausgibt[/quote] Gibt es denn  auch eine Möglichkeit diese Warnung zu unterdrücken?
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

mahe

@include(\'file.php\');
/uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


haraldos

http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

d-day

evtl. besser, als mit @ einfach alle Fehler auszuschalten:
http://de.php.net/error_reporting\" rel=\"external nofollow\">http://de.php.net/error_reporting
http://www.couro.de\" rel=\"external nofollow\">Couro do Brasil

mahe


Original von D-Day evtl. besser, als mit @ einfach alle Fehler auszuschalten:
http://de.php.net/error_reporting\" rel=\"external nofollow\">http://de.php.net/error_reporting
[/quote] Lieber so coden dass es auch mit E_ALL keine Meldungen gibt und dass man das @ auch nicht braucht /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


haraldos

Fehlermeldungen haben ja die positive Eigenschaft, dass man sieht wenn was im Argen liegt. Deswegen möcht ich die auch nicht komplett unterdrücken.
Nur in diesem speziellen Fall wäre die Fehlermeldung nicht gewünscht, weil wenn die Datei fehlt dass auch so gewollt ist.
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

mahe

www.php.net/file_exists
/uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


haraldos

ui, viel input... aber interessant!  :H:
Werd ich mir auch mal ansehen, aber wenn das mit dem @ schon reicht werd ich mich für diese Methode entscheiden, weil mit dem Code noch andere umgehen müssen und ich die Geschichte so simpel wie möglich halten möchte...
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

quix

ein @ kann auch dann sinnvoll sein, um sein eigenes warning auszugeben:


if(!@mail(...))
  echo\"Konnte mail nicht versenden\";
http://www.fudesign.de\" rel=\"external nofollow\">http://www.fudesign.de/banner/quix_fudesign_banner_powie.gif\" alt=\"quix_fudesign_banner_powie.gif\">

Also Fehler unterdrücken ohne eine Fehlermeldung auszugeben geht so:
 

@require(\'connect.php\');

 
Einfach ein @ vor die Anweisung. Wurde ja schon gepostet
Eine Script abbrechen und eine Fehlermeldung ausgeben geht so:
 

require(\'connect.php\') or die (\"Datei konnte nicht eingebunden werden\");

 
Mit or die wird das Script abgebrochen wenn die Datei nicht eingebunden werden konnte. Zusätzlich wird eine Fehlermeldung ausgegeben.
Wenn man keine Fehlermeldung ausgeben will, kann man einfach die Funktion exit(); benutzen.

haraldos

Habe mich für die @include Variante entschieden, tut alles was ich will, funktioniert einwandfrei.
Vielen Dank nochmal /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

all your base are belong to us / Discord