13. Vložené soubory

Pro vkládání souborů do kódu se používají funkce include, require, include_once, require_once.

Základní rozdíl mezi funkcí include a require je v tom, že pokud funkce include volá soubor, který neexistuje, vypíše chybové hlášení, ale pokračuje ve skriptu. Kdežto funkce require skončí fatální chybou.

Funkce include_once a require_once se používají v případě, kdy potřebujeme zamezit vícenásobnému vložení stejného externího souboru. Varianty s _once na konci zaručí, že se v případě vícenásobného použití stejného souboru vloží jen ten první.
Nejčastěji se ovšem používá funkce include.

Příkaz include

Příkaz include je základní příkaz, kterým je možné do skriptu PHP vložit jiný skript PHP. Typické je to např. v případě vkládání menu webových stránek, kdy je takovéto menu uloženo v jednom souboru a ostatní si jej pouze vkládají v podobě funkce include. Při změně menu se tak nemusejí pracně jednotlivé stránky měnit a automaticky načítají novou podobu takového menu.

Pro začátek vložíme do stránky jinou, která obsahuje adresu. Nejprve vytvoříme soubor s adresou:

<em>Kontakt:</em><br />
<strong>Jaroslav Novák</strong><br />
Holická 33<br />
111 11 Počernice<br />
e-mail: jaroslav.novak[zavináč]firmaxy.cz<br />
tel.: 123 456 789<br />

Tento soubor načítá adresu funkcí include:

<html>
<head>
<title>Příklad na include</title>
<meta charset='utf-8'>
</head>
<body>
<p>Tady je vlastní text stránky.</p>
<?php
 include 'adresa.php';
?>
</body>
</html>

Pomocí příkazu include je možné vložit cokoliv, teda i kód PHP. Např.: 

<?php 
 echo 'Tady je kousek PHP kódu<br />';
?>

Počet vložení externího souboru do kódu pomocí funkce include není omezen.

Když vkládaný soubor chybí

Pokud vložený soubor neexistuje, vypíše PHP chybové hlášení (ovšem záleží na nastavení serveru). Např:
Warning: include(test-include.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\adresa.php on line 9

V praxi se samozřejmě příkazy pro vložení externího souboru využívají v daleko větší míře a především s následným zapojením databáze. 

Další jednoduchý příklad ukazuje, jak lze "poskládat" webovou stránku tak, abychom si při vytváření dalších nových stránek webu ulehčili práci.

Nejprve je dobré si vytvořit jednotlivé části webu, které se nebudou v celém systému webových stránek měnit. Jedná se např. o hlavičku dokumentu, menu, zápatí apod. Tak že např. zahlavi.php, menu.php a paticka.php. Následné složení stránky může vypadat např. takto:

<?php
include ("hlavicka.php");
include ("menu.php");
?>
Zde bude unikátní část webu, na každé stránce jiný...
<?php
include ("paticka.php");
?>

Každá část webu pak musí vypadat takto, pouze unikátní část html kódu se bude lišit. 

Dalším vylepšením bude to, že si každou tuto "unikátní část webu" budeme chtít načítat např. z databáze. Pak nám bude stačit pouze jeden soubor (např. index.php). Další stránky nebudeme potřebovat, protože hlavní ("unikátní") část webu se bude dynamicky načítat podle toho, jakou budeme "volat" stránku. K tomuto účelu se využívá metoda _GET, která dokáže přidat do adresy URL jakoukoliv hodnotu (parametr) a tím "zavolat" patřičný obsah.

Nejprve začneme jednoduchým vložením externího souboru za pomoci funkce require. Napojení do databáze si vyzkoušíme až po prostudování kapitoly o databázích.

<html>
<head>
<title>Příklad na vkládání externích souborů</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Menu:</h1>
<ul>
  <li><a href="index.php?stranka=uvod">Úvod</a></li>
  <li><a href="index.php?stranka=reference">Reference</a></li>
  <li><a href="index.php?stranka=kontakt">Kontakt</a></li>
</ul>
<?php
echo "<p>Dynamický obsah:</p>";
require($_GET['stranka'] . '.php');
?>
</body>
</html>

 Jak pracuje metoda _GET s parametrem

Pro pochopení si nejprve všimněte jednotlivých položek menu. Odkazy jednotlivých položek mají adresu index.php?stranka=xxx. Tato konstrukce (tvar) adresy funguje tak, že do následně volané metody _GET v kódu PHP se doplní právě parametr, který vidíme za rovnítkem. Tedy např. slovo kontakt. Tím, že k tomuto slovu ještě připojíme (tečkou) příponu .php se načte do tohoto místa tento externí soubor. Pokud tedy existuje.

require($_GET['stranka'] . '.php');

Vytvořte tedy podle tohoto příkladu startovací stránku webu - index.php a dále tři "podstránky" - uvod.php, reference.php a kontakt.php. Zde je demo.

Po kliknutí na jednotlivé položky sice vše funguje, ale základní startovací stránka webu - index.php vykazuje chybu. Proto je potřeba doplnit skript o podmínku, která kontroluje, zda je v adrese nějaký parametr:

<html>
<head>
<title>Příklad na include</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Menu:</h1>
<ul>
  <li><a href="index.php">Úvod</a></li>
  <!-- Zde již můžeme nechat pouze odkaz na index.php -->
  <li><a href="index.php?stranka=reference">Reference</a></li>
  <li><a href="index.php?stranka=kontakt">Kontakt</a></li>
</ul>
<?php
echo "<p>Dynamický obsah:</p>";

if (isset($_GET['stranka']))
// pokud je něco v parametru adresy URL, pak tento parametr načti.
   require($_GET['stranka'] . '.php');
else
// Pokud ne, načti následující kód.
   echo "Toto je obsah titulní strany webu..."
?>
</body>
</html>

 Podmínka "kontroluje" zda je v parametru URL adresy nějaký text. Pokud ano, vypíše jej. Pokud ne, vypíše se část else podmínky.

Tady je výsledek.