Konstrukt include
06. 07. 2020Podpora | 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ě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: 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($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
return ob_get_clean();
}
return false;
}
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.
Jan Barášek Více o autorovi
Autor článku podniká jako fullstack senior developer v Praze. Spravuje 300 různě velkých webových projektů, fungujících dodnes. Během spolupráce nabral hluboké zkušenosti, které na tomto webu předává dál.
Rád vám pomůžu:
Kontakt Konzultace a služby Nabídka spolupráce