include()

Az include() beilleszti és feldolgozza a megadott file-t.

Egy fontos megjegyzés a működésre vonatkozólag, hogy ha egy file-t berántunk include()-al vagy require()-el, akkor kikerülünk a PHP módból HTML módba a célfile elején, és visszaáll PHP módba a file végén. Ezért, bármely célfileban 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ő file-okat behúzzál.

  1 
  2 
  3 $fileok = array ('elso.inc', 'masodik.inc', 'harmadik.inc');
  4 for ($i = 0; $i < count($fileok); $i++) {
  5     include $files[$i];
  6 }
  7 
  8      

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 file-t, 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.

  1 
  2 
  3 /*Ez NEM JÓ, és nem a várt eredményt adja */
  4 
  5 if ($feltetel)
  6     include($file);
  7 else
  8     include($other);
  9 
 10 /* Ez HELYES */
 11 
 12 if ($feltetel) {
 13     include($file);
 14 } else {
 15    include($other);
 16 }
 17 
 18      

A PHP3-ban, és a PHP4-ben is lehetőség van arra, hogy return utasítást helyezz el egy include()-olt file-ban annak érdekében, hogy a kiértékelés befejeződjön, és visszaadjon egy értéket a hívó script-nek. Bár vannak apróbb különbségek. Először is a PHP3 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 file-ból. A PHP4-ben ez a megszorítás nincs. Vagyis a PHP4 megenged visszatérési értékeket include()-olt file-okból. A visszatérési értéket ugyanúgy használhatod, mint egy közönséges függvénynél. Ez a PHP3-ban értelmezési hibát (parse error) okoz.

Példa 11-1. Az include() PHP3-ban és PHP4-ben

Tegyük fel, hogy a következő file (melynek neve: test.inc) abban a könyvtárban van, mint a főfile:
  1 
  2 
  3 <?php
  4 echo "Return előtt<br>\n";
  5 if (1) {
  6     return 27;
  7 }
  8 echo "Return után<br>\n";
  9 ?>
 10 
 11      

És legyen a főfile (main.php) tartalma az alábbi:
  1 
  2 
  3 <?php
  4 $visszteresi_ertek = include ('test.inc');
  5 echo "A file ezt adta vissza: '$visszteresi_ertek'<br>\n";
  6 ?>
  7 
  8      

Ha a main.php file-t PHP3-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. PHP4-ben az eredmény pedig:

Return előtt
A file ezt adta vissza: '27'
     

Most pedig változtassuk meg a main.php file-t az alábbira:
  1 
  2 
  3 <?php
  4 include ('test.inc');
  5 echo "Vissztértünk a main.php-ba<br>\n";
  6 ?>
  7 
  8      

PHP4-ben a kimenet:

Return előtt
Vissztértünk a main.php-ba
     
A PHP3 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 file-ban. 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 PHP3 nem támogatja az ilyen file-okból való visszatérési értékeket.

Figyelj rá, hogy mind az include(), mind a require() betölti az egész file-t a hívó scriptfile-ba, nem meghívja HTTP protokollal, vagy valami mással. Tehát bármely változó, ami a betöltés környezetében látható, automatikusan elérhető lesz a betöltött file-ban is, mivel gyakorlatilag a hívó file része lesz.

  1 
  2 
  3 include ("file.inc?elsovaltozo=1&masodikvaltozo=2"); /* Ez nem fog működni. */
  4 
  5 $elsovaltozo = 1;
  6 $masodikvaltozo = 2;
  7 include ("file.inc");  /* a két változó elérhető lesz a file.inc-en belül */
  8 
  9      

Ne vezessen félre az a tény, hogy a require() és az include() használható HTTP-n keresztül is file-ok betöltésére a Távoli file-ok kezelése szolgáltatásnak köszönhetően. A fent említett korlátozás mindig igaz!

Lásd még: readfile(), require(), és virtual().