Funkce eval() v PHP
📅 13. 07. 2020Funkce 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í.
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