Gebruikersavatar
Exception
Artikelen: 0
Berichten: 111
Lid geworden op: za 30 mei 2009, 02:36

Require() en include()

PHP: doen deze twee functies juist hetzelfde of zijn er verschillen? Ik heb een paar testjes uitgevoerd en lijken op elkaar te lijken. Iemand tips en daarvoor dank bij voorbaat :eusa_whistle:
Gebruikersavatar
qrnlk
Lorentziaan
Artikelen: 0
Berichten: 5.079
Lid geworden op: vr 14 jul 2006, 14:35

Re: Require() en include()

Ik ken geen php maar ik neem (opgrond van de termen) aan dat include(X) altijd include van X doet, terwijl require(X) X slechts 1 enkele maal zal includen, hoevaak het ook wordt aangeroepen?

Het lijkt mij overigens dat je het antwoord hierop wel zou moeten kunnen vinden met google.
Any sufficiently analyzed magic is indistinguishable from science.

Any sufficiently advanced technology is indistinguishable from magic.



There is no theory of protecting content other than keeping secrets – Steve Jobs
Gebruikersavatar
Exception
Artikelen: 0
Berichten: 111
Lid geworden op: za 30 mei 2009, 02:36

Re: Require() en include()

Wat je bedoelt is iets anders, er bestaan al soortgelijke functies in PHP genaamd include_once() en require_once(). Beter dan google is gewoon doen want met google zelf kom ik uiteindelijk een paar examples tegen. Als ik ze uittest dan krijg ik hetzelfde resultaat met beide functies en toch geloof ik dat er een verschil moet zijn. Bedankt anayway :eusa_whistle:
Gebruikersavatar
Ger
Artikelen: 0
Berichten: 17.676
Lid geworden op: di 18 okt 2005, 09:51

Re: Require() en include()

http://nl.php.net/require
require() is identical to include() except upon failure it will also produce a fatal E_ERROR level error. In other words, it will halt the script whereas include() only emits a warning (E_WARNING) which allows the script to continue.
Ofwel: het verschil zit hem puur in de foutafhandeling.
"Knowledge speaks, but wisdom listens."
- Jimi Hendrix -
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: Require() en include()

In principe gebruik ik altijd require_once. Require in plaats van include omdat ik eigenlijk nooit scripts heb die door moeten gaan als er een deel ontbreekt. En _once omdat ik eigenlijk nooit files heb die meerdere keren geïnclude hoeven te worden.

Nog een tip: door er een @ voor te zetten kun je eventuele errors onderdrukken (zoals bij iedere functie). Doe ik vaak om nare potentiële foutmeldingen met interne info zoals bestands- en variabelenamen enzo niet naar de bezoeker te lekken.

Moet je er wel aan denken dat als een script helemaal niks meer lijkt te doen, dat er dan misschien een gefaalde @require_once ofzo ergens staat, waarvan je de error dan niet meer te zien krijgt.
In theory, there's no difference between theory and practice. In practice, there is.
Gebruikersavatar
Exception
Artikelen: 0
Berichten: 111
Lid geworden op: za 30 mei 2009, 02:36

Re: Require() en include()

Require in plaats van include omdat ik eigenlijk nooit scripts heb die door moeten gaan als er een deel ontbreekt.
Is het dan niet omgekeerd? Het is volgens mij include() die niet alles gaat lezen als er een deel ontbreekt, in de praktijk lijkt dit en verschil in foutafhandeling niet duidelijk te zijn, tenzij er een zeer specifieke geval moet zijn, en dat ontgaat mij volledig, dus wel verdwaasd in dit geval.

test1.php

Code: Selecteer alles

echo "Bla bla bla bla .. <br>\n";

if (1) {

return 10;

}

echo "En dan nog eens la la la ... <br>\n";
test2.php

Code: Selecteer alles

echo "Bla2 bla bla bla .. <br>\n";

if (0>1) {

return 20;

}

echo "En dan nog eens la2 la la ... <br>\n";
index.php

Code: Selecteer alles

 echo 'Include():<br />';

$incvar1 = include ('test1.php');

$incvar2 = include ('test2.php');

echo "File returned: '$incvar1'<br>\n";

echo "File returned: '$incvar2'<br>\n";

echo 'Require():<br />';

$reqvar1 = require ('test1.php');

$reqvar2 = require ('test2.php');

echo "File returned: '$reqvar1'<br>\n";

echo "File returned: '$reqvar2'<br>\n";
Resulteert:
Include():

Bla bla bla bla ..

Bla2 bla bla bla ..

En dan nog eens la2 la la ...

File returned: '10'

File returned: '1'

Require():

Bla bla bla bla ..

Bla2 bla bla bla ..

En dan nog eens la2 la la ...

File returned: '10'

File returned: '1'
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: Require() en include()

Is het dan niet omgekeerd? Het is volgens mij include() die niet alles gaat lezen als er een deel ontbreekt, in de praktijk lijkt dit en verschil in foutafhandeling niet duidelijk te zijn, tenzij er een zeer specifieke geval moet zijn, en dat ontgaat mij volledig, dus wel verdwaasd in dit geval.
Het gaat erom wat er gebeurt op het moment dat je files gaat includen die niet bestaan.

Bijvoorbeeld:

test1.php

Code: Selecteer alles

<?php

include('bestaatniet.php');

echo "Hallo!";

?>
test2.php

Code: Selecteer alles

<?php

require('bestaatniet.php');

echo "Hallo!";

?>
test1.php resulteert in:
Warning: include() [function.include]: Failed opening 'bestaatniet.php' for inclusion

Hallo!
test2.php resulteert in:
Fatal error: require() [function.require]: Failed opening required 'bestaatniet.php'
Let op de "Hallo!" bij test1 (dus die gaat door na de gefaalde include), deze ontbreekt in de output van test2 (dus die stopt na de gefaalde require).

Nu heb ik zelf eigenlijk nooit scripts die door moeten gaan als er een benodigde include file ontbreekt, vandaar dat ik altijd require gebruik.
In theory, there's no difference between theory and practice. In practice, there is.
Benm
Artikelen: 0
Berichten: 12.262
Lid geworden op: za 21 okt 2006, 01:23

Re: Require() en include()

include() heeft eigenlijk alleen nut als je een gebruikersvriendelijke melding wilt maken van het ontbreken van een bestand.

$ok = @include('config.php');

if (!$ok)

{

echo 'doe eens ff uploaden die configuratie file!';

}

of iets in die geest.

Zelf gebruik eigenlijk altijd require(), voor bovenstaande aanpak zou ik een file_exists() aanpak beter vinden gezien het geen error oplevert die onderdrukt moet worden.
Victory through technology
Gebruikersavatar
Exception
Artikelen: 0
Berichten: 111
Lid geworden op: za 30 mei 2009, 02:36

Re: Require() en include()

Let op de "Hallo!" bij test1 (dus die gaat door na de gefaalde include), deze ontbreekt in de output van test2 (dus die stopt na de gefaalde require).
Ja, dat heb ik wel opgemerkt. Dat is ook zo als je een functie gaat gebruiken die niet gedefinieerd is.

Stel ik heb dit:

Code: Selecteer alles

mijnFunctie();

echo "I'm trying to appear after calling undefined function!";
Dat geeft dus dit terug:
Fatal error: Call to undefined function mijnFunctie() in ... on line 15
En stopt na de gefaalde functie.
Nu heb ik zelf eigenlijk nooit scripts die door moeten gaan als er een benodigde include file ontbreekt, vandaar dat ik altijd require gebruik.
Include() bestaat niet voor niets, ik zit hier wel te denken aan paar gevallen waarin het interessant zou zijn :eusa_whistle:

Bedank allemaal.

Terug naar “Informatica en programmeren”