Подтвердить что ты не робот

Захват эха в переменную

Я вызываю функции, используя имена динамических функций (что-то вроде этого)

$unsafeFunctionName = $_POST['function_name'];
$safeFunctionName   = safe($unsafeFunctionName); // custom safe() function

Затем я хочу обернуть некоторый xml вокруг возвращаемого значения функции (что-то вроде этого):

// xml header etc already created
$result = "<return_value>" . $safeFunctionName() . "</return_value>";

Проблема в том, что иногда функция возвращает значение, но иногда функция выполняет эхо-значение. То, что я хочу сделать, это захватить это эхо в переменную, но код, который я пишу, должен работать в любом случае (это означает, что если функция возвращает значение или эхо-строку).

Не совсем уверен, с чего начать какие-либо идеи?

4b9b3361

Ответ 1

Позвольте мне изложить это, сказав: будьте осторожны с этой пользовательской функцией, вызывающей бизнес. Я предполагаю, что вы знаете, насколько это опасно, поэтому вы его как-то чистите.

Прошлое, что вы хотите, называется буферизация вывода:

function hello() {
    print "Hello World";
}
ob_start();
hello();
$output = ob_get_clean();
print "--" . $output . "--";

(Я добавил тире, чтобы показать, что он не печатается вначале)

Вышеуказанное выведет --Hello World -

Ответ 2

PHP: ob_get_contents

ob_start(); //Start output buffer
echo "abc123";
$output = ob_get_contents(); //Grab output
ob_end_clean(); //Discard output buffer

Ответ 3

Чтобы использовать выходное значение, если оно присутствует, или возвращаемое значение, если нет, вы можете просто изменить свой код следующим образом:

ob_start();
$return_val = $safeFunctionName();
$echo_val = ob_get_clean();
$result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>";