Funkce eval() v PHP

   13. 07. 2020

Funkce eval slouží ke spuštění předaného řetězce jako PHP kódu.

Návrh jazyka PHP a praktické vlastnosti

PHP je interpretovaný jazyk, což znamená zejména to, že se jeho kód vyhodnocuje tzv. interpretem, což je speciální typ programu, který čte napsaný kód a ten v reálném čase vyhodnocuje přímo z řetězce. Jiné jazyky (například C) se musí před spuštěním kompilovat do strojového kódu.

Díky tomu, že se PHP interpretuje, tak existuje způsob, jak za běhu programu změnit, co přesně se bude vyhodnocovat a kód sestavit dokonce dynamicky, a přesně k tomu se eval() hodí.

Použití jen na vlastní nebezpečí!

Funkci eval použijte jen v případě, kdy přesně víte, co děláte! To znamená zejména to, že máte zkontrolované veškeré vstupy od uživatele a nemůže dojít k narušení bezpečnosti. Pokud by se totiž uživateli podařilo do funkce eval propašovat jeho řetězec, bude vyhodnocen jako reálný kód a tím může například smazat celý web, ukrást databázi nebo získat kontrolu nad celým serverem.

Reálný příklad

Dobrých příkladů, kde lze eval použít moc neexistuje, protože prakticky vždy existuje lepší způsob, jak úlohu řešit.

Použít lze například při vyhodnocování výrazů:

// Uživatelský dotaz
$query = '5 + 3 * 2';

// Zpracování výrazu jako běžného PHP kódu
eval('$result = @(' . $query . ');');

// Výpis proměnné s řešením výrazu
echo $result; // vypíše 11

Podrobnosti jsou v článku Kalkulačka v PHP: Zpracování matematického výrazu jako řetězec.

Použití pro vykreslení šablon

Občas se eval používá pro vyhodnocení vygenerovaného kódu, typicky překompilované šablony.

Jak již ale bylo řečeno, tak lze každý případ řešit jinak a lépe a v tomto případě dává větší smysl serializovanou šablonu uložit do samostatného PHP souboru a ten načíst přes require nebo include. Kromě toho, že budeme mít nad obsahem šablony plnou kontrolu, tak také zůstane fyzicky na disku, což podporuje zlepšení výkonu aplikace kvůli možnosti cachování.

Nechte si posílat nové články do mailu:

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