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().