Az include() beilleszti és feldolgozza a megadott fájlt.
Ha az "URL fopen wrapper"-ek be vannak kapcsolva (ami az alapbeállítású helyzet), akkor az include() használatakor távoli fájlt is megadhatsz. Lásd a Távoli fájlok kezelése című fejezetet és az fopen() függvényt.
Egy fontos megjegyzés a működésre vonatkozólag, hogy ha egy fájlt berántunk include()-al vagy require()-el, akkor kikerülünk a PHP módból HTML módba a célfájl elején, és visszaáll PHP módba a fájl végén. Ezért, bármely célfájlban levő PHP kódot közre kell fogni egy érvényes PHP kezdő- és zárótag-gel.
Ez történik valahányszor az include()-hoz ér a program, tehát használhatod az include()-ot egy ciklus belsejében, hogy különböző fájlokat behúzzál.
$fileok = array ('elso.inc', 'masodik.inc', 'harmadik.inc'); for ($i = 0; $i < count($fileok); $i++) { include $files[$i]; } |
Az include() abban különbözik a require()-től, hogy míg az include() minden alkalommal kiértékelődik, ahányszor előfordul (és csak akkor, ha éppen oda kerül a vezérlés), addig a require() az első alkalommal helyettesíti a fájlt, akár kiértékelődik a tartalma, akár nem (például egy olyan if kifejezésben, amely mindig hamis).
Mivel az include() egy különleges nyelvi elem, védened kell kapcsos zárójelekkel, ha egy feltételes utasításon belül szerepel.
/*Ez NEM JÓ, és nem a várt eredményt adja */ if ($feltetel) include($file); else include($other); /* Ez HELYES */ if ($feltetel) { include($file); } else { include($other); } |
A PHP 3-ban, és a PHP 4-ben is lehetőség van arra, hogy return utasítást helyezz el egy include()-olt fájlban annak érdekében, hogy a kiértékelés befejeződjön, és visszaadjon egy értéket a hívó szkriptnek. Bár vannak apróbb különbségek. Először is a PHP 3 nem engedi meg, hogy a return egy blokkban legyen, kivéve ha az egy függvényblokk, ami ugye csak abból a függvényből fog visszatérni, és nem az egész fájlból. A PHP 4-ben ez a megszorítás nincs. Vagyis a PHP 4 megenged visszatérési értékeket include()-olt fájlokból. A visszatérési értéket ugyanúgy használhatod, mint egy közönséges függvénynél. Ez a PHP 3-ban értelmezési hibát (parse error) okoz.
Példa 11-2. Az include() PHP 3-ban és PHP 4-ben Tegyük fel, hogy a következő fájl (melynek neve: test.inc) abban a könyvtárban van, mint a főfájl:
És legyen a főfájl (main.php) tartalma az alábbi:
Ha a main.php fájlt PHP 3-ból hívjuk meg, értelmezési hibát (parse error) kapunk a 2. sorban; nem lehet egy include()-nak az értékét venni. PHP 4-ben az eredmény pedig:
Most pedig változtassuk meg a main.php fájlt az alábbira:
PHP 4-ben a kimenet:
A fenti hiba annak a következménye, hogy a return egy kapcsos zárójelezett részben van, amely nem függvényen belül található a test.inc fájlban. Ha a return-t kivesszük a blokkból, a kimenet ilyen lesz:
A nemkívánatos '27' azért van ott, mert a PHP 3 nem támogatja az ilyen fájlokból való visszatérési értékeket. |
Ha egy fájlt include()-al töltesz be, a kód, amit tartalmaz azt az érvényességi kört örökli, ami az include() hívás sorára vonatkozott. Bármilyen változó, ami azon a soron elérhető, rendelkezésre áll a hívott fájlban. Ha az include() egy függvényben található a hívó fájlban, akkor a hívott fájl minden kódja úgy fog viselkedni, mintha a függvényen belül írtad volna.
Ha az include()-al hívott fájl HTTP-n keresztül érkezik az "fopen wrapper"-ek használatával, és a célszerver feldolgozza a fájlt, mint PHP kódot, átadhatsz változókat a hívott fájlnak HTTP GET lekérési formában. Ez nem ugyanaz, mintha a include()-al hívott fájl örökölné a helyi változókat, mivel a szkript valójában a távoli szerveren fut le, és a futási eredmény kerül beépítésre a helyi szkriptbe.
/* Ezek a példák feltételezik, hogy a szerver be van állítva a .php * fájlok feldolgozására és nincs beállítva a .txt fájlok feldolgozására * A 'működik' azt jelenti, hogy az $elsovaltozo és $masodikvaltozo * változók elérhetőek a behívott fájlban. */ /* Nem működik: a file.txt nem kerül feldolgozásra */ include ("http://szerver/file.txt?elsovaltozo=1&masodikvaltozo=2"); /* Nem működik: egy 'file.php?elsovaltozo=1&masodikvaltozo=2' * nevű fájlt keres a helyi rendszeren */ include ("file.php?elsovaltozo=1&masodikvaltozo=2"); /* Működik */ include ("http://szerver/file.php?elsovaltozo=1&masodikvaltozo=2"); $elsovaltozo = 1; $masodikvaltozo = 2; include ("file.txt"); /* Működik */ incluie ("file.php"); /* Működik */ |
Lásd még: require(), require_once(), include_once(), readfile(), és virtual().