Springen naar inhoud

Require() en include()


  • Log in om te kunnen reageren

#1

Exception

    Exception


  • >100 berichten
  • 113 berichten
  • Ervaren gebruiker

Geplaatst op 28 oktober 2009 - 15:06

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:

Veranderd door exception, 28 oktober 2009 - 15:07


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

qrnlk

    qrnlk


  • >5k berichten
  • 5079 berichten
  • Lorentziaan

Geplaatst op 28 oktober 2009 - 16:21

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

#3

Exception

    Exception


  • >100 berichten
  • 113 berichten
  • Ervaren gebruiker

Geplaatst op 28 oktober 2009 - 16:46

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:

#4

Ger

    Ger


  • >5k berichten
  • 16444 berichten
  • Technicus

Geplaatst op 28 oktober 2009 - 17:11

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 -

#5

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 28 oktober 2009 - 20:14

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.

Veranderd door Rogier, 28 oktober 2009 - 20:14

In theory, there's no difference between theory and practice. In practice, there is.

#6

Exception

    Exception


  • >100 berichten
  • 113 berichten
  • Ervaren gebruiker

Geplaatst op 29 oktober 2009 - 12:02

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
echo "Bla bla bla bla .. <br>\n";
if (1) {
	return 10;
}
echo "En dan nog eens la la la ... <br>\n";

test2.php
echo "Bla2 bla bla bla .. <br>\n";
if (0>1) {
	return 20;
}
echo "En dan nog eens la2 la la ... <br>\n";

index.php
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'


#7

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 29 oktober 2009 - 13:08

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
<?php
include('bestaatniet.php');
echo "Hallo!";
?>
test2.php
<?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.

#8

Benm

    Benm


  • >5k berichten
  • 8787 berichten
  • VIP

Geplaatst op 29 oktober 2009 - 14:32

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

#9

Exception

    Exception


  • >100 berichten
  • 113 berichten
  • Ervaren gebruiker

Geplaatst op 30 oktober 2009 - 00:11

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:
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.

Veranderd door exception, 30 oktober 2009 - 00:13






0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures