buffer — PHP: создание собственной буферизации и использование & quot; ob _ * & quot; функции

Я настроил все так, чтобы мой код считывал текст каждой страницы и автоматически генерировал из нее оглавление и список сносок. Я помещаю текст сноски в текст страницы в том месте, к которому он относится. Когда код читает файл страницы, он создает оглавление из заголовков и помещает его в начало страницы. Он также удаляет текст сносок и помещает их в список, который он помещает в конце страницы. Он также управляет нумерацией сносок и размещением связанных с ними подстрочных номеров сносок для них.

Чтобы сделать это, вместо echo () содержимого страницы, я собираю содержимое в переменную, $PageText, Затем у меня есть функции, которые читают эту переменную, удаляют текст сноски, компилируют оглавление и список сносок и вставляют их в $PageText, После, я echo($PageText);,

Кажется, что я делаю здесь самодельную форму буферизации, и что я могу сделать то же самое с помощью чего-то вроде

ob_start();
echo(<page contents>);
$PageText = ob_get_contents();
make_ToC($PageText);
make_footnotes($PageText);
ob_end_flush();

Будет ли это более эффективно, чем использование моей собственной переменной буфера? Или есть какая-то другая причина, по которой лучше использовать встроенную систему буферизации?

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

Подобный вопрос был задан пять лет назад, Буферизация вывода и сохранение содержимого в переменную в PHP. Интересно, что ответы, похоже, говорят о том, что я мог бы лучше контролировать содержимое, используя систему «ob_», тогда как я чувствую, что у меня есть больший контроль, используя мою собственную переменную. Есть что-то, чего я не понимаю в этом?

0

Решение

Буферизация вывода — это метод, позволяющий перевести уже сгенерированный вывод в режим ожидания, и имеет несколько применений:

  • Лучше используйте сетевые передачи (например, избегайте отправки почти пустых пакетов HTTP)
  • Применить прозрачные преобразования (например, минимизировать сгенерированный HTML или переписать URL)
  • Возможность полностью отменить вывод (например, в случае ошибки)
  • Захватить вывод функций, которые печатаются на стандартный вывод (например, var_dump())

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

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

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector