[PHP] Работа с буфером вывода

amarcord74

Пусть есть некая библиотченая функция X, которая любит все побочные результаты своей работы выводить в браузер.
Если я вызову
X;
echo "Yo!";
на экран выдастся:
<результат работы X>Yo!
ob_start;
X;
ob_clean;
echo...
ob_flush;
делу не помогают. Как загасить вывод библиотечной функции?

otets-mihail

@X
это только для ошибок

amarcord74

Да, я это в самом начале делал. Но она выводит вообще всё. Даже результаты типа: успешно обработала 12 строк

kruzer25

Вот тебе пример функции X:
function X {
ob_start;
echo 'xyu';
}

Теперь можешь сам придумать, что делать.

amarcord74

И что? Эта функция X вообще из сишной dll (там стековый ob_start вряд ли вызывается)
Проблема в том, что здесь:
echo "A";
X;
echo "B!";
ob_clean;
A и B загасились, а весь кал от X остался! Что за нафиг!

kruzer25

Скорее всего, тогда эта X напрямую выводит текст на выход.
Вряд ли тут можно чем-то помочь, всё-таки она работает на более низком уровне, чем php-код.

stat7819605

Попробуй сначало вызвать функцию, а после ob_start
Если пхп ошибки не скажет, то пхп точно ни чем не поможет

kruzer25

Попробуй сначало вызвать функцию, а после ob_start
Если пхп ошибки не скажет
А откуда может взяться ошибка?

amarcord74

Я сделал проще:
ob_start
X;
fwrite($file, "something");
...
ob_end_clean;
......
include($file)
Таким образом выводится только то, что нужно мне

kruzer25

1) "include($file)" - замечательный стиль, не боишься, что в этом something у тебя окажется пользовательский ввод?
2)
ob_start
X;
fwrite($file, "something");
...
ob_end_clean;
Чем это лучше
ob_start;
X;
ob_end_clean;
echo "something";

?

amarcord74

Тем, что последнее не работает
не боишься, что в этом something у тебя окажется пользовательский ввод

В something находится XSL табличка с распарсенным хмл и всё

kruzer25

Объясни-ка мне, тёмному, почему в
ob_start
X;
fwrite($file, "something");
...
ob_end_clean;

от функции X ничего не выводится, а в
ob_start
X;
ob_end_clean;

выводится.
Оставить комментарий
Имя или ник:
Комментарий: