Что такое код ob_clean


Содержание
Илон Маск рекомендует:  Dos fn 54h дать переключатель верификации dos

ob_clean — Очищает (стирает) буфер вывода

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

ob_clean — Очищает (стирает) буфер вывода

Описание

Эта функция удаляет содержимое выходного буфера.

Эта функция не уничтожает буфер вывода, как это делает ob_end_clean() .

Буфер вывода должен запускаться функцией ob_start() с флагом PHP_OUTPUT_HANDLER_CLEANABLE. Иначе не сработает ob_clean() .

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Смотрите также

  • ob_flush() — Сброс (отправка) буфера вывода
  • ob_end_flush() — Сброс (отправка) буфера вывода и отключение буферизации вывода
  • ob_end_clean() — Очищает (стирает) буфер вывода и отключает буферизацию вывода
Илон Маск рекомендует:  Что такое код bzclose

Понимание чистого кода в Andro >
    Переводы, 2 июня 2020 в 9:29

Прежде чем начать писать свой код, нужно понять, как его масштабировать и как им управлять.

Как сказал Дядя Боб в своей книге:

Вы читаете эту статью по двум причинам. Во-первых, вы программист. Во-вторых, вы хотите программировать лучше.

Представьте, что вы ищете книги в библиотеке. Если книги отсортированы и классифицированы, вы найдёте их гораздо быстрее. Кроме того, благодаря хорошему дизайну интерьера вы будете чувствовать себя комфортно.

Если вы хотите создать что-то стоящее, нужно уметь не только писать, но и аккуратно организовывать свой код. Программист со стороны, получив ваш код, должен увидеть имена переменных, пакетов или классов и сразу всё понять. Он не должен ругаться и начинать проект с нуля.

Что такое «чистый код»?

Нехорошо наспех заканчивать проект, если другие не смогут понять ваш код. Это ваша недоработка и ваша ответственность.

Код можно назвать «чистым», если в нём легко разбирается вся команда. А другой разработчик может прочитать его и улучшить. С понятностью приходит читаемость, изменяемость, расширяемость и лёгкость сопровождения.

Должен ли я заботиться об этом?

Вы должны заботиться о своём коде, потому что именно он будет описывать ваш мыслительный процесс другим. Нужно думать о том, как сделать код более простым и читабельным.

Характеристики чистого кода

  • Ваш код элегантен: он должен вызывать у вас улыбку, как от хорошо сделанной музыкальной шкатулки или машины с красивым дизайном.
  • О вашем коде позаботились: кто-то нашёл время, чтобы сделать его простым и упорядоченным и уделил внимание деталям.
  • Ваш код сфокусирован: каждая функция, каждый класс, каждый модуль выполняют одну конкретную задачу и не перегружены лишними фичами.
  • Не содержит дубликатов;
  • Работает на всех тестах;
  • Имеет минимальное количество объектов, таких как классы, методы, функции и тому подобное.

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

Задавайте уместные имена

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

Имена классов

Классы и объекты должны называться существительными или фразами из них, например Customer , WikiPage , Account и AddressParser . Избегайте таких слов, как Manager , Processor , Data или Info в названии класса. Имя класса не должно быть глаголом.

Имена методов

Методы должны называться глаголами или фразами из них, например postPayment() , deletePage() или save() . Аксессоры, мутаторы и предикаты должны быть названы по их значению, иметь префикс get , set и соответствовать стандарту JavaBean.

Используйте доменные названия для задач

Если не можете подобрать название, используйте доменные названия для задач. По крайней мере, программист, который поддерживает ваш код, может спросить эксперта по домену, что оно значит.

Написание кода с использованием принципов S.O.L.I.D.

Принципы придуманы Робертом К. Мартином (Дядя Боб). SOLID — это термин, описывающий принципы проектирования хорошего кода.

Принцип единой ответственности — SRP

Это означает, что каждый класс должен отвечать за что-то одно. Никогда не должно быть более одной причины для изменения класса. То, что вы можете добавлять в класс всё, что хотите, не означает, что нужно это делать. Разделите большие классы на более мелкие и избегайте классы Бога.

У нас есть RecyclerView.Adapter с логикой внутри onBindViewHolder .

RecyclerView.Adapter противоречит принципу единой ответственности, потому что он имеет логику внутри onBindViewHolder .

Принцип Открытости-Закрытости — OCP

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

Простым примером будет класс RecyclerView.Adapter . Вы можете легко расширить этот класс и создать собственный адаптер с настраиваемым поведением, не изменяя существующий класс RecyclerView.Adapter .

Принцип подстановки Лисков — LSP

Дочерние классы никогда не должны нарушать определения типов родительского класса.

Это означает, что подкласс должен переопределять методы родительского класса, которые не нарушают функциональность родительского класса. Например, вы создаёте интерфейсный класс с прослушивателем onClick () , а затем применяете прослушиватель в MyActivity и назначаете ему всплывающее действие при вызове onClick () .

Принцип разделения интерфейса — ISP

Принцип разделения интерфейса (ISP) гласит, что ни один клиент не должен зависеть от методов, которые он не использует.

Это означает, что если вы хотите создать класс A и реализовать его в другом классе B , не нужно переопределять все методы класса A внутри класса B . Чтобы стало понятнее, давайте рассмотрим пример:

Внутри кода нужно выполнить SearchView.OnQueryTextListener() и только метод onQuerySubmit() .

Как этого добиться? Просто создайте обратный вызов и класс, который распространяется на SearchView.OnQueryTextListener() .

А вот как это реализовать:

С Kotlin можно использовать функцию-расширение:

И, наконец, вот как это сделать:

​Принцип инверсии зависимостей — DIP

Зависит от абстракций. Не зависит от конкрементов.
Принцип обращения зависимостей определяется двумя пунктами:

Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.

Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

Простой пример — шаблон MVP. У вас есть объект интерфейсов, который помогает взаимодействовать с конкретными классами. Это означает, что классам пользовательского интерфейса ( Activity / Fragment ) не нужно знать фактическую реализацию методов в Presenter . Если есть какие-либо изменения внутри, классы пользовательского интерфейса не должны знать об изменениях.

Посмотрим на примере кода:

Поэтому мы создаём интерфейс, который абстрагирует реализацию presenter, а наш класс представления сохраняет ссылку на PresenterInterface .

Заключение

Опытные программисты знают, что все объекты — миф. Иногда действительно нужны простые структуры данных с работающими на них процедурами. С этого момента вы должны начать продумывать, как реализовать проект, чтобы в перспективе его можно было легко обновлять.

PHP буферизация: буферизация вывода в PHP

PHP буферизация

Слово буферизация говорит само за себя, это значит, что мы что-то копируем, помещаем в буфер. В php, буферизация позволяет скопировать определенную часть выводимого контента (html) в браузер, обработать ее нужными нам функциями и показать его пользователю. Зачем это нам? Например, можно реализовать сжатие html кода, или замены некоторых сущностей на другие, да что угодно. Более детально рассмотрим применение php буферизации в последнем пункте статьи.

Реализация буферизации вывода в PHP

Буферизация начинается с функции ob_start([callback]);. После ее объявления буферизироваться будет все, что выводится в окно браузера. Аргумент callback это пользовательская функция, через которую можно пропустить и обработать выводимый текст, она должна возвращать одну строку.

ob_end_clean(); — завершает буферизацию и чистит буфер, но в браузер ничего не посылается.

Существует много функций для работы с буферизацией вывода в php. Сейчас посмотрим маленький практический пример для большей ясности дела. Например, у Вас генерируется страница, но при этом необходимо в тексте страницы заменить все буквы «ё» на буквы «е. Тогда делается примерно такое:

$page = str_replace(«ё», «е», $page);

Применение буферизации вывода

Рассмотрим некоторые практические стороны применения буферизации вывода. Как уже упоминалось, предположительно мы имеем часть выводимого html кода или весь выводимый код. Что же с ним можно сделать?

Реализация автообновления на вашем сайте.

Обновление в смысле обновление контента. Посмотрев лекции Каширина, я узнал, что для того, что-бы страничка сайта была обновляемой в глазах поискового робота, необходимо, что-бы 25% содержимого страницы поменялось коренным образом. В начале, я просто создавал блок анонса, который выводил 25% символов от статьи, блок был одним и тем же на всех страницах, обновлялся 1 раз в сутки, выбирался случайным образом из массы всех статей. Он выглядел таким образом:

Но здесь была проблемка, одна статья была на 1500 символов, другая на 10000 символов, и если анонсом выбиралась та, что на 10000 символов, и анонс отображался на той статье в которой 1500 символов, то получалось что блок анонса составлял 5000 символов, это гораздо больше, нежели сама статья. Может, вы думаете, что нужно было, узнать количество символов исходной статьи и вывести в 4 раза меньше в анонсе. Я тоже так думал, но есть еще много факторов, таких как комментарии, новости сайта… В общем, нужно было знать количество символов всей странички, в этом мне помогла php буферизация или php буферизация вывода, называйте как хотите. Ниже код как я это реализовал.

В файле anons.php, узнаем количество символов контента страницы без html тегов используя функции strip_tags() и strlen(). Далее дело техники, вычисляем блок анонса, его html код пишем в $show_anons и прицепляем после буферизированного контента ($buffer). Вот так вот мне помогла буферизация вывода в php. Ниже, скриншоты блока анонса, написанного с помощью использования php буферизации.

Вполне приличные блоки анонсов. Автообновление странички организовано, кричу УРА php буферизации.

Сжатие html кода

Об этом у меня есть отдельно написанная статья: сжатие html кода, но я предоставлю пример php кода, в нем тоже используется PHP буферизация.

Другие варианты

Как видите применению буферизации вывода в php, нет предела. Наверняка у вас уже появились свои идеи, как реализовать те или иные штучки на своем сайте. Спасибо за внимание, надеюсь моя статья была вам полезной. Кстати, если имеете еще идеи по поводу применения php буферизации, пишите в комментариях ниже.

ob_clean (9)

Я видел много ob_get_clean() последнее время. Обычно я выполнил $test.= ‘test’ Мне интересно, если один быстрее и/или лучше, чем другой. Вот код с использованием ob_get_clean():ob_start();…

Просто хочу выбрать мозги экспертов по буферизации вывода php. Бывают случаи, когда я хотел реализовать его по той или иной причине, но мне всегда удалось изменить свой код, чтобы обойти его. Я и…


Я прочитал немало материалов в Интернете, где разные авторы предлагают использовать буферизацию вывода. Самое забавное, что большинство авторов аргументируют его использование только потому, что он…

Что такое буферизация вывода и почему она используется в PHP?…

В чем разница между ob_flush() и flush() и почему я должен назвать оба? ob_flush() говорит: Эта функция будет отправлять содержимое выходного буфера(если есть). Ссылка flush() говорит: Сбрасыв…

Привет, пожалуйста, смотрите ниже код:

Оба они, похоже, делают одно и то же: верните содержимое выходного буфера и удалите его обратно. Какой из них я должен использовать?…

Я написал простой сценарий ретрансляции, который подключается к веб-камере и читает из сокета и выводит эти данные с помощью функции печати. Данные представляют собой данные MJPG с уже настроенными…

У меня есть PHP-скрипт, который отправляет большое количество записей, и я хочу очистить каждую запись, как только она будет доступна: клиент может обрабатывать каждую запись по мере ее поступления,…

Что такое код ob_clean

Что такое OutPut Buffering и зачем оно нужно?

Буферизация вывода (OutPut Buffering) (активная) не посылает никаких данных клиенту (браузеру) из скрипта, до применения специальных функций. Этот говорит о том, что все что вы выводите в print(); или echo не посылается пользователю, а сохраняется во внутреннем буфере PHP.

При этом, стоит отметить, что заголовки, передаваемые пользователю через функцию header(); — посылаются.

Применение буферизации вывода бывает обусловлено необходимостью посылки заголовков ( header(); ) внутри скрипт, когда уже что-то должно вывестись. Сразу хочу оговориться, это не есть правильный подход к реализации программного алгоритма.
Еще один случай — когда бывает необходимо произвести какие-либо манипуляции со всем текстом, посылаемым пользователю. К примеру, вам необходимо заменить во всем тексте ссылки на http://domain.COM на http://domain.RU, само собой лучше это сделать один раз в конце, чем каждый раз применительно к каждому print(); или echo.

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

Как это применять?

При использовании ниже написанного кода, мы не получим ошибки «Headers already sends by. » при установки куки. Сам же текст, написанный echo будет отправлен пользователю только при вызове ob_end_flush();.

Функция ob_start(); — делает буферизацию вывода — активной.
Обращаем ваше внимание на то, что ob_start(); может быть вызвана, когда уже есть открытая буферизация, главное — не забыть вызвать нужное кол-во раз ob_end_flush();.

В чем разница между функциями закрытия буферизации?

Для закрытия буфера используются следующие функции:

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

ob_end_clean — эта функция — аналогична предыдущей, за исключением того, что она закрывает активную буферизацию вывода.

ob_flush — аналогична ob_clean, но помимо очистки буфера, она посылает его содержимое браузеру пользователя.

ob_end_flush — аналогична ob_end_clean(), но как и ob_flush помимо очистки буфера, она посылает его содержимое браузеру пользователя.

Помимо вышеперечисленных функций есть еще две.

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

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

  • flush() не действует на схему буферизации вашего web-сервера или браузера — на стороне клиента.
  • Некоторые серверы, особенно под Win32, будут, тем не менее, продолжать буферизовать вывод вашего скрипта, пока он не закончит работу перед передачей результатов в браузер.
  • Серверные модули для Apache, вроде mod_gzip, могут сами выполнять буферизацию, что не даст немедленной пересылки данных из функции flush() клиенту.
  • Даже браузер может буферизовать свой ввод до отображения. Netscape, например, буферизует текст, пока не получит end-of-line или начало тэга, и не будет отображать таблицы, пока не увидит тэга

    самой внешней таблицы.

  • Некоторые версии Microsoft Internet Explorer начинают отображать страницу только после получения 256 байт вывода, поэтому вам может понадобиться отправить дополнительные пробелы перед очисткой, чтобы такие браузеры вывели страницу.

ob_implicit_flush — очень интересная функция. По сути дела позволяет автоматически вызывать flush(); после каждого print(); или echo();.
Данная функция отключает буферизацию.

Когда будет вызвана callback функция, указанная в ob_start();?

ob_start(); может получать строковой параметр, для callback функции. Эта функция будет вызвана в момент очистки активного буфера вывода. По сути, эта callback функция получает в себя в качестве параметра текущее содержимое буфера вывода и возвращает новое, которое уже и будет передаваться пользователю.

Это как раз удобно для:

Цитата
Еще один случай — когда бывает необходимо произвести какие-либо манипуляции со всем текстом, посылаемым пользователю. К примеру, вам необходимо заменить во всем тексте ссылки на http://domain.COM на http://domain.RU, само собой лучше это сделать один раз в конце, чем каждый раз применительно к каждому print(); или echo.

Пример взят из мануала, как хорошо иллюстрирующий проблему:

Как узнать, что сейчас находится в буфере вывода?

Для того чтобы получить содержимое буфера вывода надо воспользоваться функцией ob_get_contents();.

Сколько данных будет передано пользователю?

Размер данных находящихся в буфере вывода можно определить функцией ob_get_length();. Сразу хочу сказать, что strlen( ob_get_contents() ); — не правильно, поскольку буфер может содержать к примеру картинки, выдаваемые GD, а их размер по символам не посчитать.

ob_get_length();. Возвращает размер в битах.

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET
  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь
  • Темы «ищу скрипт», «подскажите скрипт» и т.п. будут переноситься в форум «Web-технологии»
  • Темы с именами: «Срочно», «помогите», «не знаю как делать» будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

Изменение буферизации вывода в версии 7.1

Исторически наш сайт использует шаблоны XSL.
Последней строкой используемого хидера шаблона Битрикса (header.php) является вызов функции ob_start(); которая включает буферизацию вывода.
Весь вывод того, что было до этого момента в хидере, также буферизовался и помещался в глобальную переменную $pre_text.
Первой строкой футера шаблона является вызов функции $text = ob_get_clean(); который вытаскивает содержимое буфера, заполненное при обработке рабочей страницы между хидером и футером.
Далее в футере буферы $pre_text и $text склеиваются, и идет код, преобразующий полученный буфер с помощью шаблонов XSL.

На версии 6.5 это работает без нареканий.
На версии же 7.1 создается впечатление, что Битрикс при переходе от кода страницы (скажем index.php) к коду футера шаблона принудительно чистит буфер, выдавая его содержимое браузеру.
Это приводит к тому, что содержимое буфера (то есть index.php) выводится в начале страницы, а вызов функции ob_get_clean() в начале футера возвращает ПУСТОЙ результат, что приводит к пустой рабочей области страницы.

Что посоветуете сделать чтоб не переписывать все?

При наступлении события OnBeforeProlog делаю:

Правила форума «PHP»

Код

При OnAfterEpilog:

Код

Результат — белая страница. Либо версия автора, либо буфер обмена недостаточного размера, чтоб вместить страницу.
Сам Битрикс как всегда никаких сообщений в логах не оставляет.

Версия Битрикса — самая свежая на сегодняшний день

Omar Khazamov, Конкретно Вы скорее всего словили allocate memory или багу php. Включите дебаг и посмотрите логи httpd для прояснения картины.

Как пример, можно еще рассмотреть то, как это делает модуль компрессии:
1) Подписывается на событие OnPageStart
2) Проводит сжатие на OnAfterEpilog
Обратите внимание на 2 ob_start!

У себя же попробуйте в эпилоге поставить:

Отдельный вопрос, проведите ликбез: каким образом вывод в буфер можно синхронизировать с текущим состоянием страницы веб-браузера?

Вот пример. При создании заказа в инет магазине буферный контент $content возвращается к браузеру, затем происходит переадресация.
Данный код работает:

Код

Однако, если поменять местами последние две строчки:

Код

В результате получается вот что (картинка 2)

Т.е сообщение whats up выводится прямо в AJAX-response идущего от веб-сервера (картинка 1 ниже)

Почему Битрикс допускает такое? Неужели нельзя дождаться окончания выполнения служебной части эпилога, (включая обработчика OnAfterEpilog), а только затем указать браузеру начать обрабатывать\интерпретировать страницу?

Разница между ob_clean и ob_flush?

В чем разница между ob_clean() и ob_flush() ?

Кроме того, в чем разница между ob_end_clean() и ob_end_flush() ? Я знаю , что ob_get_clean() и ob_get_flush() как получить содержимое и конца буферизации вывода.

эти *_clean варианты просто опустошение буфера, в то время как *_flush функция печати , что находится в буфере (отправить содержимое в буфер вывода).

Пример:

Ключевым отличием является то *_clean() выкидывает изменения и *_flush() выводит в браузере.

Использование ob_end_clean()

он в основном используется, когда вы хотите, чтобы иметь кусок HTML и не хотите выводить в браузер сразу, но могут быть использованы в будущем.

где , как ob_end_flush() будет оказывать дважды, один раз для каждого.

Изменение буферизации вывода в версии 7.1

Исторически наш сайт использует шаблоны XSL.
Последней строкой используемого хидера шаблона Битрикса (header.php) является вызов функции ob_start(); которая включает буферизацию вывода.
Весь вывод того, что было до этого момента в хидере, также буферизовался и помещался в глобальную переменную $pre_text.
Первой строкой футера шаблона является вызов функции $text = ob_get_clean(); который вытаскивает содержимое буфера, заполненное при обработке рабочей страницы между хидером и футером.
Далее в футере буферы $pre_text и $text склеиваются, и идет код, преобразующий полученный буфер с помощью шаблонов XSL.

На версии 6.5 это работает без нареканий.
На версии же 7.1 создается впечатление, что Битрикс при переходе от кода страницы (скажем index.php) к коду футера шаблона принудительно чистит буфер, выдавая его содержимое браузеру.
Это приводит к тому, что содержимое буфера (то есть index.php) выводится в начале страницы, а вызов функции ob_get_clean() в начале футера возвращает ПУСТОЙ результат, что приводит к пустой рабочей области страницы.

Что посоветуете сделать чтоб не переписывать все?

При наступлении события OnBeforeProlog делаю:

Код

При OnAfterEpilog:

Код

Результат — белая страница. Либо версия автора, либо буфер обмена недостаточного размера, чтоб вместить страницу.
Сам Битрикс как всегда никаких сообщений в логах не оставляет.

Версия Битрикса — самая свежая на сегодняшний день

Omar Khazamov, Конкретно Вы скорее всего словили allocate memory или багу php. Включите дебаг и посмотрите логи httpd для прояснения картины.

Как пример, можно еще рассмотреть то, как это делает модуль компрессии:
1) Подписывается на событие OnPageStart
2) Проводит сжатие на OnAfterEpilog
Обратите внимание на 2 ob_start!

У себя же попробуйте в эпилоге поставить:

Отдельный вопрос, проведите ликбез: каким образом вывод в буфер можно синхронизировать с текущим состоянием страницы веб-браузера?

Вот пример. При создании заказа в инет магазине буферный контент $content возвращается к браузеру, затем происходит переадресация.
Данный код работает:

Код

Однако, если поменять местами последние две строчки:

Код

В результате получается вот что (картинка 2)

Т.е сообщение whats up выводится прямо в AJAX-response идущего от веб-сервера (картинка 1 ниже)

Почему Битрикс допускает такое? Неужели нельзя дождаться окончания выполнения служебной части эпилога, (включая обработчика OnAfterEpilog), а только затем указать браузеру начать обрабатывать\интерпретировать страницу?

ob_clean () очистить все уровни Ob?

Я просто был случай, когда я делал ob_clean (), прежде, чем вторя мой JSON, для вызова Ajax. Проблема заключалась в том, я был 2 уровня Ob, в то время, и ob_clean () был только очистка внутреннего OB. Для того, чтобы очистить их обоих, ну, я только что сделал

Что такое правильный способ очистки всех текущих буферов?

Edit: да этот вопрос похож, а другая говорит о промывке, я говорю о чистке. Существует несколько вещей, которые я не получаю о end_clean, чистый, get_clean и т.д., и, следовательно, ответ будет отличаться и нюансами от другого.

вызывает бесконечный цикл, в конечном счете тайм-аут.

Изменить с ob_clean на ob_end_clean?

РНР документация ReadFile имеет пример, как загрузить файл:

, который использует ob_clean, чтобы удалить содержимое, которое может быть в выходном буфере.

Однако я прочитал сообщения (http://heap.tumblr.com/post/119127049/a-note-about-phps-output-buffer-and-readfile), которые указывают, что ob_end_clean следует использовать вместо ob_clean для больших файлов.

Мой вопрос: что такое использование ob_clean вместо ob_end_clean? Если ob_end_clean работает как ob_clean и избегает проблемы, почему не все документы показывают, используя ob_end_clean?

    2 1
  • 21 мар 2020 2020-03-21 14:53:21
  • useSticks Mattt tadman AllInOne Javier Lopez Javier Lopez AllInOne

1 ответ

ob_clean() сбрасывает буфер, но оставляет активным буферизацию. Это означает, что ваш вывод readfile() будет буферизирован.

ob_end_clean() сбрасывает буфер и полностью отбрасывает буферизацию, позволяя readfile() сбрасывать непосредственно в браузер.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL