Может кто-то указать, что я здесь ошибаюсь? 🙂
<?php
$q = $_GET[q];
$acuman = <<<PARSE
input: (contains: "hello"){
output: "hello";
}
PARSE;
$acuman = str_replace("input: (contains: ", 'if(strpos(', $acuman);
$acuman = str_replace("){", ', $q) !== false) {', $acuman);
$acuman = str_replace("output: ", '$output = ', $acuman);
eval($acuman);
?>
Я пытаюсь выполнить строку $acuman
, heredoc
который был изменен различными str_replace
функции. Тем не менее, это not
делать то, что я намереваюсь сделать, и я не совсем понимаю, что делать, потому что я пробовал много разных вещей.
Так как многие люди казались смущенными: Мое намерение для кода в строке $acuman
быть выполненным как код должным образом. Я просто хочу eval
функция для работы. я знать этот злой зло, пожалуйста, прекратите: я просто прошу помощи в решении проблемы.
Редактировать: Когда я повторяю строку $acuman
вот что я получаю:
if(strpos("hello", $q) !== false) { $output = "hello"; }
У вас есть аргументы в неправильном порядке:
if(strpos($q, "hello") !== false) { $output = "hello"; }
strpos()
принимает «стог сена» (искомая строка) в качестве первого аргумента и «иглу» (строку, которую нужно найти как в «стоге сена») в качестве второго аргумента.
Итак… $acuman
кажется, содержит следующее:
if(strpos("hello", $q) !== false) {
echo "hello";
}
Что указывает на то, что $q
должен содержать часть "hello"
повторить строку "hello"
,
Я не вижу здесь никаких проблем, КРОМЕ тот $q = $_GET[q];
не будет работать с любой современной версией, потому что q
обрабатывается как константа, а не переменная или индекс строкового литерала. Увидеть эта PHP документация на предмет.
При переходе на $q = $_GET['q'];
вместо этого (обратите внимание на кавычки) кажется, что этот код действительно работает. Будет выводить "hello"
проходя любую часть "hello"
к параметру URL (который передается в код PHP).
Излишне говорить: не используйте этот код для производства. Код, как он есть, очень уязвим и позволяет пользователю передавать необработанный код PHP в ваш скрипт для выполнения. Функция этого кода может быть полностью переписана более безопасным способом, но вы выразили желание продолжать использовать eval();
поэтому, пожалуйста, будьте осторожны.
Наслаждаться.