Стек вывода в PHP - PullRequest
       27

Стек вывода в PHP

0 голосов
/ 15 июня 2009

Следующее не достигает того, чего я желаю

<?
echo ob_start() . "<br>";
echo "1x<br>";
echo ob_start() . "<br>";
echo "2x<br>";
echo ob_flush() . "<br>";
echo "3x<br>";
echo ob_flush() . "<br>";
?>

Вывод следующий

1
1x
1
2x
1
3x
1

Я хочу что-то вроде

1x
3x
2x

Полагаю, проблема в том, что он помещает выходные данные второго объекта ob_start () в первый выходной буфер. Но как мне получить желаемый результат?

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

Ответы [ 5 ]

2 голосов
/ 15 июня 2009

См. Руководство по PHP для ob_start . Вы не хотите

echo ob_start();

потому что эта функция возвращает истину или ложь, поэтому она выведет 1 или 0 вместо

ob_start();
echo "1x" . "<br />";
echo "2x" . "<br />";
echo "3x" . "<br />";
ob_flush();

В целом ваша цель не очень ясна. ob_start () используется для очистки выходных данных перед их отправкой. Это не должно использоваться в качестве стека.

Попробуйте SplStack , если вы хотите использовать стек в PHP.

1 голос
/ 15 июня 2009

А как насчет следующего:

<?php
echo ob_start();
echo "1x<br>";
$keep_me_1 = ob_get_contents(); /* optional and for later use */
echo ob_flush();

echo ob_start();
echo "3x<br>";
$keep_me_2 = ob_get_contents(); /* optional and for later use  */
echo ob_flush();

echo ob_start();
echo "3x<br>";
$keep_me_3 = ob_get_contents(); /* optional and for later use  */
echo ob_flush();

?>

Если вы хотите использовать больше функций «стека», вам стоит взглянуть на ob_end_flush.

1 голос
/ 15 июня 2009

Почему бы тебе просто не написать

echo "1x"."<br>";
echo "3x"."<br>";
echo "2x"."<br>";
0 голосов
/ 13 мая 2015

Ваша проблема в том, что ob_* функции не должны быть echo 'ed.

<?
ob_start() . "<br>";
echo "1x<br>";
ob_start() . "<br>";
echo "2x<br>";
ob_flush() . "<br>";
echo "3x<br>";
ob_flush() . "<br>";
?>

Функция ob_start () возвращает логическое значение. В общем, ваш код просто отображает значение true, которое при преобразовании в строку переводится как 1.

0 голосов
/ 15 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...