PHP eval не выполняется должным образом

Может кто-то указать, что я здесь ошибаюсь? 🙂

<?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"; }

-3

Решение

У вас есть аргументы в неправильном порядке:

if(strpos($q, "hello") !== false) { $output = "hello"; }

strpos() принимает «стог сена» (искомая строка) в качестве первого аргумента и «иглу» (строку, которую нужно найти как в «стоге сена») в качестве второго аргумента.

1

Другие решения

Итак… $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(); поэтому, пожалуйста, будьте осторожны.

Наслаждаться.

-1

По вопросам рекламы [email protected]