Funkcia `eval` sa používa na vykonanie odovzdaného reťazca ako kódu PHP.
PHP je interpretovaný jazyk, čo znamená najmä to, že jeho kód vyhodnocuje interpreter, špeciálny typ programu, ktorý číta napísaný kód a vyhodnocuje ho priamo z reťazca v reálnom čase. Ostatné jazyky (napríklad C) sa musia pred spustením skompilovať do strojového kódu.
Keďže PHP je interpretované, existuje spôsob, ako zmeniť, čo presne sa bude vyhodnocovať za behu, a dokonca aj dynamicky kompilovať kód, čo je presne to, na čo slúži funkcia eval()
.
Funkciu eval
používajte len vtedy, keď presne viete, čo robíte! To znamená najmä to, že ste skontrolovali všetky vstupy používateľov a nemôže dôjsť k narušeniu bezpečnosti. Ak sa totiž používateľovi podarí prepašovať svoj reťazec do funkcie eval
, bude vyhodnotený ako skutočný kód a môže napríklad vymazať celú stránku, ukradnúť databázu alebo získať kontrolu nad celým serverom.
Neexistuje veľa dobrých príkladov, kde by sa dalo použiť eval
, pretože prakticky vždy existuje lepší spôsob riešenia problému.
Možno ho použiť napríklad pri vyhodnocovaní výrazov:
// Dotaz používateľa$query = '5 + 3 * 2';// Spracujte výraz ako regulárny kód PHPeval('$result = @(' . $query . ');');// Výpis premennej s riešením výrazuecho $result; // vypíše 11
Podrobnosti nájdete v Kalkulátor v PHP: Spracovanie matematického výrazu ako reťazca.
Niekedy sa eval
používa na vyhodnotenie vygenerovaného kódu, typicky skompilovaných šablón.
Ako však bolo spomenuté, každý prípad sa dá riešiť inak a lepšie a v tomto prípade je rozumnejšie uložiť serializovanú šablónu do samostatného súboru PHP a načítať ju pomocou require
alebo include
. Okrem toho, že máte plnú kontrolu nad obsahom šablóny, zostane aj fyzicky na disku, čo podporuje vyšší výkon aplikácie vďaka možnosti ukladania do vyrovnávacej pamäte.
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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sk