Konstrukt include

Podpora PHP 4, PHP 5
Stručný popis Připojí do scriptu jiný textový soubor nebo script.
Požadavky Jiný vkládaný textový soubor nebo script.
Poznámka Neumí načítat externí soubory.

Popis

Vloží do stránky jiný textový soubor nebo script. Podporuje soubory typu plain/text.

Vložené soubory se chovají jako kdyby ve stránce byly přímo.

Vložené scripty se automaticky spouštějí.

Vložený script přenáší hodnotu proměnných.

Nelze načítat z externího uložiště. Umí číst jen čisté neformátované texty a PHP soubory.

Povolené formáty cest:

script.php - soubor ve stejném adresáři, bude spuštěn
script.html - soubor ve stejném adresáři, nebude spuštěn
./soubor.php - soubor ve stejném adresáři, bude spuštěn
../stranka.html
slozka\DalsiSlozka\soubor.php - zápis ve Windows
adresar/DalsiAdresa/soubor.php - zápis v Unixových systémech

Lomítka typu **\** a **/** umí vzájemně převádět, takže to nemusíte řešit.

Nepovolený zápis cesty: http://domena.pripona/slozka/soubor.php

Podobné funkce

Příklad

1 include 'file.php';

Do stránky vloží script file.php a spustí ho.

vars.php

1 $color = 'green';
2 $fruit = 'apple';

test.php

1 $color = '';
2 $fruit = '';
3 
4 echo 'A ' . $color . ' ' . $fruit; // A
5 
6 include 'vars.php';
7 
8 echo 'A ' . $color . ' ' . $fruit; // A green apple

VAROVÁNÍ: Následující zápis není možný, obsah proměnných přenášejte tím, že je definujete!

1 include 'soubor.php?parametr=neco';

Návratové hodnoty

Žádné, jen vloží soubor.

POZNÁMKA: Umožňuje porovnat obsah souboru, je to ale bezpečnostní riziko. Na pořadí závorek záleží! Příklad:

1 if ((include 'soubor.php') == 'OK') {
2     echo 'Hodnota je "OK"';
3 }

Jedná se o potenciální bezpečnostní riziko!

Lze vyřešit funkcí file_get_conten­ts(), readfile() nebo fopen(). Fopen() je vhodné použít jen na .txt a .html soubory.

Bezpečnější čtení souboru lze vyřešit definováním vlastní funkce.

Příklad:

 1 $string = get_include_contents('somefile.php');
 2 
 3 function get_include_contents($filename) {
 4     if (is_file($filename)) {
 5         ob_start();
 6         include $filename;
 7         return ob_get_clean();
 8     }
 9     return false;
10 }

Poznámky a tipy ostatních vývojářů

Jakub Vrána mi do mailu napsal:

1 include 'clanky/' . $_GET['clanek'] . '.html';

Tohle je extrémně nebezpečné.

Útočník může jako název článku předat odkaz do jiného adresáře používající ../ nebo něco podobného, někdy je možné se zbavit i koncovky předáním nulového bajtu na konci.

Je potřeba použít alespoň funkci basename(), lépe ale povolit jen hodnoty z whitelistu.

Sponzorované odkazy
Pomohl Vám tento článek?