www.manualy.net
logo
Originální stránky pro originální lidi. Výrobky chráněných dílen
Google

Include vs Require

23.2. 2006 Vebloud PHP

Používání PHP a vkládání souborů patří neodmyslitelně k sobě. Ale kdy použít kterou funki? Jaký je rozdíl mezi require a include? Každá funkce má jinou fukci, ale tyto jsou zdánlivě stejné.

Funkce include() a require() shodně slouží k vkládání souborů a to tak, že se soubor, který se nachází na adrese, předané v parametru funkce, vloží na místo, kde je funkce vložena.

PHP parser se k vkládanému souboru chová stejně, jako ke všem ostatním tzn. že parsuje PHP kód pouze v souborech se zadanými přílohami. Tudíž si musíme dávat pozor na soubory s příponou inc apd. Protože pokud server nebude nastaveno jejich parsování, ukážeme uživateli zdrojový kód skriptu.

Adresa souboru může být zadána i absolutně a to i na jiný server. V tomto případě se ale do našeho skriptu nepromítnou definice funkcí a proměnných z vloženého skriptu, ale pouze výsledek skriptu, protože pro vzdálený webserver bude požadavek na vložení stejný, jako z prohlížeče. Pokud by tomu bylo jinak a funkce a proměnné se přenášeli, dalo by se velice snadno vykrádat skripty.

Někdy může nastat situaci, kdy nevíme, zda se již požadovaný skript, např. s definicemi konstant, nebo funkcí, vložil a jeho opětovné vložení by znamenalo zborcení skriptu, např. redefinice funkcí. V tomto případě použijeme funkci include_once nebo require_once, které mají stejnou funkčnost jako include a require, ale nedovolí vložit jeden soubor vícekrát.

Existence těchto funkcí vyvrací velice často publikovaný omyl, že rozdíl mezi funkcí include a require je v tom, že include se provede tolikrát, kolikrát je vložen a require jenom jednou.

Skutečný rozdíl mezi těmito funkcemi lze vytušit již z jejich názvu. Include v angličtině znamená: obsahuje, zahrnuje apod. Require má poněkud jiný význam a to: požadovat, vyžadovat, potřebovat jako nutnost. Z těchto rozdílů vyplývá, co se stane, pokud soubor není nalezen, případně nemáme práva k jeho čtení či je nám jiným způsobem zabráněno jeho přečtení. Funkce include způsobí při chybě pouze warning, nebo-li varování, jehož zobrazování je na většině „ostrých“ serverů potlačeno a pokračuje se ve zpracování stránky. Naproti tomu require při chybě způsobí fatal error a zpracování stránky se ukončí. Stejně reagují i include_once a require_once.

Z těchto rozdílů vyplívá, že funkci require použijeme u životně důležitých komponent stránky a funkci include u souborů, které nejsou až tak důležité. Ale ani toto se nesmí brát dogmaticky, vše záleží na tom, jakým způsobem budeme případné chyby zachytávat a řešit. Například při nepodařeném připojení k databázi nemusí skript končit pomocí klauzule DIE, ale může pokračovat s tím, že zobrazíme uživateli přívětivě se tvářící chybovou hlášku. Ovšem chyba takovéhoto kalibru by měla být okamžitě reportována a opravena.

U těchto funkcí nelze říct, která je lepší či horší, prostě má každá jiné použití a účel. Tudíž ani nelze doporučit, kterou z nich používat. Je potřeba uvažovat a použít tu, která je pro ten daný účel vhodnější.

DatumAutorPříspěvek
16. 10. 2006 21:25 V.Linhart

hrubka

15. 11. 2006 16:11 Vebloud

Děkuji za upozornění.

07. 02. 2009 15:22 cokoliw

dík