Буферизация вывода не работает или не имеет никакого смысла - PullRequest
0 голосов
/ 05 ноября 2019

Я абсолютно в тупике. Я должен либо упустить что-то очень простое, либо не понять, как это работает.

Буферизация вывода вообще не работает на MAMP PRO, все содержимое просто отображается на странице и ничего не попадает в буфер, даже неПривет, мир. Я попробовал каждый пример

Я создаю простую структуру и буферизация вывода просто не работает.

У меня есть класс модуля с функцией, которая включает в себя файл, и код просто отображается настраница без меня даже очистка буфера.

Я проверил файл php.ini в обоих загруженных файлах конфигурации, и файл конфигурации показывает output_buffering = 4096. Я так запутался

Вот кодпример:

//index.php
var_dump(ob_start());//returns true
echo "Hello World"; //prints straight to the screen
include MODULES.'/home.php'; //output comes straight out
var_dump(ob_get_contents());//Shows html string
$test = ob_get_contents();
echo $test; //Output gets displayed twice

В PHP.ini: output_buffering = 4096;

1 Ответ

1 голос
/ 05 ноября 2019

ob_get_contents не очищает буфер, поэтому, когда скрипт завершается, он, как обычно, сбрасывается на выход. Если вы хотите получить данные только в виде строки и очистить буфер, используйте ob_get_clean()

. Вы можете думать о буферизации вывода как о создании "закладок" или "точек восстановления" в буфере вывода. Например:

  • буфер пуст
  • echo 'hello' - выходной буфер содержит строку "hello"
  • ob_start() - создается "закладка"
  • echo 'world' - выходной буфер имеет две строки: "привет" и "мир" - строки
  • ob_get_contents() - возвращает содержимое выходного буфера, так как последняя "закладка" - возвращает "мир", но содержимое буфера остаетсяте же сценарии
  • заканчиваются и сбрасывают весь выходной буфер на экран

  • , если вместо этого вы используете ob_get_clean(), он возвращает содержимое с последней «закладки» и удаляет его извыходной буфер - в буфере есть только «привет»

РЕДАКТИРОВАТЬ: я знаю, что это очень простое и наивное объяснение, но я помню, это помогло мне понять концепцию.

...