| 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.
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.html
slozka\DalsiSlozka\soubor.php
- zápis ve Windowsadresar/DalsiAdresa/soubor.php
- zápis v Unixových systémechLomí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
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; // Ainclude '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';
Žá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;}
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.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo online.
Napište mi, pokud si nevíte rady.
Lektor: Jan Barášek
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | cs