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 eval danych 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.

eval jest 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.