PHP Eval альтернатива для генерации динамического условия if

#php #eval

#php #eval

Вопрос:

У меня есть следующий php-код, в котором я пытаюсь сгенерировать динамическое условие if с помощью eval:

 $categoryId = $_REQUEST['category_id'];
$locationId = $_REQUEST['location_id'];

$recordId = 1;

$criteria = [(!empty($categoryId) ? '(isInCategory($recordId, $categoryId))' : ''),
             (!empty($locationId) ? '(isInLocation($recordId, $locationId))' : '')];

$check = implode(' amp;amp; ', array_filter($criteria));

// $check will be  
// (isInCategory($recordId, $categoryId)) amp;amp; (isInLocation($recordId, $locationId))
// if $categoryId and $locationId are not empty

if(eval("return $check;")) 
{ 
    echo 'true'; 
}
else
{
   echo 'false';
}
  

Проблема в том, что весь сам код находится внутри оператора eval, поэтому в основном я получаю eval внутри eval, который выдает ошибку — не могу устранить ошибку, потому что все, что я получаю, это дружественная страница ошибок, поэтому я предполагаю, что это так, т. Е. вы не можете использовать eval внутри другого eval???

Я вынужден использовать соответствующий продукт, так что это мое ограничение. Есть ли способ, которым я могу реорганизовать eval в приведенном выше выражении if с помощью какой-либо другой техники.

Я читал кое-что об использовании call_user_func(), но я новичок в этом. Любая помощь была бы оценена.

Комментарии:

1. Вы только что создали удаленное выполнение кода. Просто забудьте, что оператор eval() вообще существует, а затем заставьте себя задать вопрос, как я мог бы сделать это без eval?

2. @Dharman Я понятия не имею, что вы подразумеваете под удаленным выполнением кода. Пожалуйста, не могли бы вы объяснить и продемонстрировать, используя какой-нибудь пример кода.

3. Просто погуглите это. То, что вы делаете с eval, в основном позволяет любому пользователю из Интернета выполнять любой фрагмент кода, который они хотят, на вашем сервере. Это никогда не то, что вы хотите, потому что весь сервер скомпрометирован.