eval
konstrukcja językowa
Wykonuje podany string jako kod PHP. Skrajnie niebezpieczna — prawie zawsze da się jej uniknąć.
eval(string $code): mixed
⚠️ Krytyczne ostrzeżenie bezpieczeństwa: Nigdy nie przekazuj do
evaldanych pochodzących od użytkownika (parametrów GET/POST, nagłówków, danych z bazy, plików upload). Umożliwia to zdalne wykonanie dowolnego kodu (Remote Code Execution — RCE) na serwerze. Atakujący może przejąć cały serwer.
evaljest prawie zawsze zbędna. Każdy jej przypadek użycia można zastąpić bezpieczniejszą alternatywą.
eval przyjmuje string i wykonuje go jako kod PHP w bieżącym zasięgu. Kod ma dostęp do lokalnych zmiennych. Jeśli zawiera return, eval zwraca tę wartość; w przeciwnym razie zwraca null (lub false przy błędzie składni).
<?php
declare(strict_types=1);
// eval z kodem kontrolowanym przez programistę (nadal niezalecane)
$x = 10;
$wynik = eval('return $x * 2;');
echo $wynik; // wynik: 20
Alternatywy, których należy używać zamiast eval:
| Cel | Zamiast eval użyj |
|---|---|
| Dynamiczne wywołanie funkcji | $fn = 'strlen'; $fn($s); lub call_user_func |
| Szablon HTML | buforowanie wyjścia + include, lub silnik szablonów (Twig) |
| Wyrażenia matematyczne od użytkownika | dedykowana biblioteka parsera |
| Generowanie kodu | pliki .php zapisywane na dysku |
eval istnieje w PHP z historycznych przyczyn. W nowoczesnym kodzie nie ma dla niej uzasadnionego miejsca.