PHP Manual
/
Bezpečnost

Funkce eval() v PHP

16. 02. 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í.

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:

Související články

1.
7.

Potřebujete poradit s PHP?

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

V jiných jazycích

Status:
All systems normal.
2024