Konstrukt include
Vloží do stránky jiný textový soubor nebo script. Podporuje soubory typu plain/text.
| Podpora | PHP 4, PHP 5, PHP 7 |
|---|---|
| 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ěnscript.html- soubor ve stejném adresáři, nebude spuštěn./soubor.php- soubor ve stejném adresáři, bude spuštěn../stranka.htmlslozka\DalsiSlozka\soubor.php- zápis ve Windowsadresar/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: https://domena.pripona/slozka/soubor.php
Podobné funkce
Příklad
include 'file.php';
Do stránky vloží script file.php a spustí ho.
vars.php
$color = 'green';
$fruit = 'apple';
test.php
$color = '';
$fruit = '';
echo 'A ' . $color . ' ' . $fruit; // A
include 'vars.php';
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!
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:
if ((include 'soubor.php') == 'OK') {
echo 'Hodnota je "OK"';
}
Jedná se o potenciální bezpečnostní riziko!
Lze vyřešit funkcí file_get_contents(), 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:
$string = get_include_contents('somefile.php');
function get_include_contents(string $filename): ?string
{
if (is_file($filename)) {
ob_start();
include (string) $filename;
return ob_get_clean();
}
return null;
}
Poznámky a tipy ostatních vývojářů
Jakub Vrána mi do mailu napsal:
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.