1 van 1

Require() en include()

Geplaatst: wo 28 okt 2009, 15:06
door Exception
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:

Re: Require() en include()

Geplaatst: wo 28 okt 2009, 16:21
door qrnlk
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.

Re: Require() en include()

Geplaatst: wo 28 okt 2009, 16:46
door Exception
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:

Re: Require() en include()

Geplaatst: wo 28 okt 2009, 17:11
door Ger
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.

Re: Require() en include()

Geplaatst: wo 28 okt 2009, 20:14
door Rogier
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.

Re: Require() en include()

Geplaatst: do 29 okt 2009, 12:02
door Exception
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'

Re: Require() en include()

Geplaatst: do 29 okt 2009, 13:08
door Rogier
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.

Re: Require() en include()

Geplaatst: do 29 okt 2009, 14:32
door Benm
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.

Re: Require() en include()

Geplaatst: vr 30 okt 2009, 00:11
door Exception
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.