include()
Az include() beilleszti és feldolgozza a megadott fájlt.
Az alábbiak igazak a require()-ra is. A require() és az include() megegyezik egymással a hibakezelését leszámÃtva. Az include() nem fatális hibát, figyelmeztetést generál, a require() viszont fatális hibát jelez. Magyarán, ahol az igényelt fájl nemlétekor a futást meg kell szakÃtani, ajánlott a require(). Az include() nem Ãgy viselkedik, a hibától függetlenül a szkript futtatása folytatódik. Bizonyosodj meg, hogy a include_path helyesen van beállÃtva! Jegyezd meg, hogy a szintaktikai hiba a include()-olt fájlban nem okozza a feldolgozás megszakÃtását a PHP 4.3.5 verziója elÅ‘tt, ettÅ‘l a verziótól kezdve viszont igen.
A beillesztendÅ‘ fájlokat elÅ‘ször az aktuális könyvtárhoz viszonyÃtott include_path-ban keresi, majd az aktuális szkript könyvtárához viszonyÃtott include_path-ban. Például ha az include_path a ., aktuális könyvtár a /www/, beillesztetted az include/a.php-t amelyben van egy include "b.php" utasÃtás, a b.php-t elÅ‘ször a /www/-ben keresi, majd a /www/include/-ban. Ha a fájlnév ../ karakterekkel kezdÅ‘dik, csak aktuális munkakönyvtárhoz viszonyÃtott include_path-ban keresi.
A fájl beillesztése során a megadott fájl örökli az include() helyén érvényes változó hatáskört. Bármely változó, amely azon a ponton elérhetÅ‘, elérhetÅ‘ a beillesztett fájlban is. Ellenben a beillesztett fájlban szereplÅ‘ függvény- és osztálydefinÃciók, globális láthatósággal rendelkeznek.
Example#1 Egyszerű include() példa
valtozok.php
<?php
$szin = 'zöld';
$gyumolcs = 'alma';
?>
teszt.php
<?php
echo "Egy $szin $gyumolcs"; // Egy
include 'valtozok.php';
echo "egy $szin $gyumolcs"; // Egy zöld alma
?>
Függvény belsejében a megadott fájlban szereplő kód úgy fog viselkedni, mintha az magában a függvényben szerepelt volna. Ez azt jelenti, hogy a fájl örökli a változók érvényességi körét.
Example#2 Függvényen belüli beillesztés
<?php
function ize()
{
global $szin;
include 'valtozok.php';
echo "Egy $szin $gyumolcs";
}
/* valtozok.php az ize() függvény hatóköréébe esik, *
* Ãgy a $gyumolcs nem elérhetÅ‘ a fÅ‘ggvényen kÃvül. *
* A $szin igen, mivel globálisnak lett deklarálva. */
ize(); // Egy zöld alma
echo "Egy $szin $gyumolcs"; // Egy zöld
?>
Ha egy fájlt beillesztünk az include()-dal vagy require()-ral, akkor a célfájl elején az elemző kilép a PHP módból HTML módba, majd visszaáll PHP módba a fájl végén. Ennek okán bármely beillesztendő fájlban levő PHP kódot közre kell fogni egy érvényes PHP kezdő- és zárójelöléssel.
Ha a "fopen wrappers" szolgáltatás engedélyezve van (mint például az alapértelmezett konfigurációban), a beillesztendÅ‘ fájlt megadhatod URL-ként (HTTP-ként vagy más támogatott wrapperként - a protokollok listáját itt találhatod: List of Supported Protocols/Wrappers), ahelyett hogy helyi útvonalként adnád meg. Ha a célszerver PHP kódként feldolgozza a fájlt, akkor átadhatsz változókat a hÃvott fájlnak HTTP GET lekérési formában. Ez nem teljesen ugyanaz, mintha a include()-dal 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.
A PHP Windows rendszeren futó verziója a 4.3.0-ásnál régebbi változataiban nem támogatja a távoli állomány elérést e függvény használatakor, még akkor sem, ha az allow_url_fopen engedélyezett.
Example#3 include() HTTP-n keresztül
/* 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 $ize és $bigyo változók elérhetőek
* a hÃvott fájlban. */
// Nem működik: a file.txt nem kerül feldolgozásra
include ("https://szerver/file.txt?ize=1&bigyo=2");
// Nem működik: egy 'file.php?ize=1&bigyo=2' nevű fájlt keres a helyi gépen
include ("file.php?ize=1&bigyo=2");
// Működik
include ("https://szerver/file.php?ize=1&bigyo=2");
$ize = 1;
$bigyo = 2;
include ("file.txt"); /* Működik */
incluie ("file.php"); /* Működik */
Mivel az include() és a require() különleges nyelvi elem, kapcsos zárójelekkel kell közrefogni, ha egy feltételes utasÃtáson belül szerepel.
Example#4 include() feltételes blokkon belül
/*Ez NEM JÓ, és nem a várt eredményt adja */
if ($feltetel)
include($file);
else
include($other);
/* Ez a HELYES */
if ($feltetel) {
include($file);
} else {
include($other);
}
return utasÃtást lehet elhelyezni egy include()-olt fájlban annak érdekében, hogy a kiértékelés ott befejezÅ‘djön, és visszaadjon egy értéket a hÃvó szkriptnek. A visszatérési értéket ugyanúgy használhatod, mint egy közönséges függvénynél. Ez azonban nem lehetséges távoli fájlok beillesztésénél, kivéve akkor, ha a távoli fájl kimenete érvényes kezdÅ‘ és záró tag-ekkel rendelkezik (mint bármilyen helyi fájl). A szükséges változókat deklarálhatod a tag-ek között, és be lesznek vezetve bármely ponton ahol a fájl beillesztésre került.
Mivel az include() egy speciális nyelvi konstrukció, nem szükséges bezárójelezni az argumenumát. Vigyázz amikor a visszatérÃtési értékét hasonlÃtod.
Example#5 Az include visszatérÃtési értékének hasonlÃtása
<?php
// nem múködik, mivel include(('vars.php') == 'OK') -ként értelmezi, azaz include('')
if (include('vars.php') == 'OK') {
echo 'OK';
}
// működik
if ((include 'vars.php') == 'OK') {
echo 'OK';
}
?>
Note: PHP 3, a return nem jelenhet meg függvény blokkon kÃvül máshol, amely esetben a függvénybÅ‘l történÅ‘ visszatérést jelöli.
Example#6 Az include() és a return() utasÃtás
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$ize = include 'return.php';
echo $ize; // kiÃrja: 'PHP'
$bigyo = include 'noreturn.php';
echo $bigyo; // kiÃrja: 1
?>
$bigyo értéke 1, mert a beillesztés sikeres volt. Figyeld meg a különbséget a két fenti példa között. Az elsÅ‘ a return() segÃtségével visszaadott egy értéket, a második nem. Ha nem tudja beilleszteni a fájlt, FALSE-t ad vissza és E_WARNING szintű hibát ad.
Ha a beillesztett fájlban vannak függvénydefinÃciók, azokat használni lehet a fÅ‘ állományban függetelenül attól, hogy a return() elÅ‘tt vagy után vannak. Ha a fájl kétszer kerül beillesztésre, a PHP 5 fatális hibát ad, mivel a függvények már deklarálva voltak. A PHP 4 nem panaszkodik miattuk a return() után definiált függvények miatt. Ajánlott a include_once() használata, ahelyett hogy a beillesztett fájlban vizsgáld, hogy már be volt-e illesztve és ez esetben return-al kilépjél.
Egy másik módja a PHP fájlok beemelésének a kimenet elfogása a kimenet szabályzó függvények és az include() használatával.
Example#7 PHP file kimenetének stringbe gyűjtése kimenetszabályozás használatával
<?php
$string = get_include_contents('somefile.php');
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
return false;
}
?>
Az automatikus fájlbeillesztéssel kapcsolatban lásd a auto_prepend_file és a auto_append_file php.ini konfigurációs beállÃtásokat.
Note: Mivel ez egy nyelvi konstrukció és nem egy függvény, nem hÃvható meg a változó változók lehetÅ‘ség felhasználásának segÃtségével.
Lásd még a require(), require_once(), include_once(), readfile() és virtual() függvényeket!