Если вы хоть раз писали на PHP и вас тянуло использовать eval(), — остановитесь. Подумайте. Сделайте глубокий вдох. А теперь удалите этот код. eval() — это функция, которая позволяет выполнить любую строку как PHP-код. Красиво звучит, да? Только на практике это выглядит как оставленный на кухне включённый газ: пока всё тихо, но один неверный параметр — и вы получаете взрыв. Пример прост: $code = 'echo 2 + 2;';
eval($code); Выведет 4. И вроде бы всё замечательно. Но теперь подставим данные от пользователя: eval($_GET['data']); И всё. Добро пожаловать в ад под названием Remote Code Execution.
Любой, кто передаст ?data=system('rm -rf /');, получит полный контроль над вашим сервером. Вопрос справедливый. Функции вроде mysql_query() — давно в истории, а eval() живёт и здравствует.
Ответ прост: совместимость и ответственность.
PHP изначально задумывался как язык для гибких сценариев и шаблонов. eval() был частью этой идеи. А теперь это скорее артефакт старого интернета — вроде IE6 или jQu