#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, в основном позволяет любому пользователю из Интернета выполнять любой фрагмент кода, который они хотят, на вашем сервере. Это никогда не то, что вы хотите, потому что весь сервер скомпрометирован.