include()

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:

<?php
echo "Return előtt<br>\n";
if (1) {
    return 27;
}
echo "Return után<br>\n";
?>

     

És legyen a főfájl (main.php) tartalma az alábbi:

<?php
$visszteresi_ertek = include ('test.inc');
echo "A fájl ezt adta vissza: '$visszteresi_ertek'<br>\n";
?>

     

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:

Return előtt
A fájl ezt adta vissza: '27'
     

Most pedig változtassuk meg a main.php fájlt az alábbira:

<?php
include ('test.inc');
echo "Vissztértünk a main.php-ba<br>\n";
?>

     

PHP 4-ben a kimenet:

Return előtt
Vissztértünk a main.php-ba
     
A PHP 3 pedig ezt fogja mondani:

Return előtt
27Vissztértünk a main.php-ba

Parse error: parse error in /home/torben/public_html/phptest/main.php on line 5
     

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:

Return előtt
27Vissztértünk a main.php-ba
     

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