Захват эха в переменную
Я вызываю функции, используя имена динамических функций (что-то вроде этого)
$unsafeFunctionName = $_POST['function_name'];
$safeFunctionName = safe($unsafeFunctionName); // custom safe() function
Затем я хочу обернуть некоторый xml вокруг возвращаемого значения функции (что-то вроде этого):
// xml header etc already created
$result = "<return_value>" . $safeFunctionName() . "</return_value>";
Проблема в том, что иногда функция возвращает значение, но иногда функция выполняет эхо-значение. То, что я хочу сделать, это захватить это эхо в переменную, но код, который я пишу, должен работать в любом случае (это означает, что если функция возвращает значение или эхо-строку).
Не совсем уверен, с чего начать какие-либо идеи?
Ответы
Ответ 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>";