HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Буферизация вывода - одна из тех концепций в PHP, с которой достаточно часто сталкиваются разработчики, но мало кто задумывается, как она устроена. В статье рассказываем о том, что это за концепция в PHP и зачем ее использовать.</strong></p>
1 <p><strong>Буферизация вывода - одна из тех концепций в PHP, с которой достаточно часто сталкиваются разработчики, но мало кто задумывается, как она устроена. В статье рассказываем о том, что это за концепция в PHP и зачем ее использовать.</strong></p>
2 <blockquote><p>Эта статья - адаптированный перевод<a>материала</a>разработчицы Лары Шенк, опубликованного в ее личном блоге. Повествование ведется от лица автора.</p>
2 <blockquote><p>Эта статья - адаптированный перевод<a>материала</a>разработчицы Лары Шенк, опубликованного в ее личном блоге. Повествование ведется от лица автора.</p>
3 </blockquote><h2>Содержание</h2>
3 </blockquote><h2>Содержание</h2>
4 <ul><li><a>PHP буферизация вывода: что это</a></li>
4 <ul><li><a>PHP буферизация вывода: что это</a></li>
5 <li><a>Какие есть функции для работы буферизации вывода PHP</a></li>
5 <li><a>Какие есть функции для работы буферизации вывода PHP</a></li>
6 <li><a>Зачем использовать буферизацию PHP</a></li>
6 <li><a>Зачем использовать буферизацию PHP</a></li>
7 <li><a>Итог</a></li>
7 <li><a>Итог</a></li>
8 </ul><h2>PHP буферизация вывода: что это</h2>
8 </ul><h2>PHP буферизация вывода: что это</h2>
9 <p>Буферизация вывода в PHP - это способ указать, что нужно отдельно сохранить данные перед их отправкой в браузер. То есть данные можно получить, а затем поместить в переменную, работать с ними и уже позже отправлять в браузер.</p>
9 <p>Буферизация вывода в PHP - это способ указать, что нужно отдельно сохранить данные перед их отправкой в браузер. То есть данные можно получить, а затем поместить в переменную, работать с ними и уже позже отправлять в браузер.</p>
10 <p>Как-то раз мне на почту пришел вопрос про плагин Timber - я люблю использовать его при разработке сайтов на WordPress. У меня спросили: "Что делает header.php и footer.php в плагине Timber?". Быстрый ответ на этот вопрос: "Они ничего не делают", потому что они нужны для работы определенных плагинов в WordPress.</p>
10 <p>Как-то раз мне на почту пришел вопрос про плагин Timber - я люблю использовать его при разработке сайтов на WordPress. У меня спросили: "Что делает header.php и footer.php в плагине Timber?". Быстрый ответ на этот вопрос: "Они ничего не делают", потому что они нужны для работы определенных плагинов в WordPress.</p>
11 <p>Однако я этого не знала, потому что мне никогда не приходилось взаимодействовать с этими файлами во время разработки. Мне стало интересно, и я начала исследовать, из чего состоят эти файлы. Оказалось, что в основном в них находятся функции буферизации PHP (ob_start, ob_get_contents).</p>
11 <p>Однако я этого не знала, потому что мне никогда не приходилось взаимодействовать с этими файлами во время разработки. Мне стало интересно, и я начала исследовать, из чего состоят эти файлы. Оказалось, что в основном в них находятся функции буферизации PHP (ob_start, ob_get_contents).</p>
12 <p>Давайте представим диалог разработчика с языком программирования PHP (если бы с ним можно было просто поговорить):</p>
12 <p>Давайте представим диалог разработчика с языком программирования PHP (если бы с ним можно было просто поговорить):</p>
13 <p>Другими словами, PHP отправляет данные в браузер с сервера, как только функция завершается. Например, если вы пишете код: echo "Hi there"; для получения строки "Привет!", она отправляется браузеру сразу после запуска функции с echo.</p>
13 <p>Другими словами, PHP отправляет данные в браузер с сервера, как только функция завершается. Например, если вы пишете код: echo "Hi there"; для получения строки "Привет!", она отправляется браузеру сразу после запуска функции с echo.</p>
14 <p>Однако, если вы запустите функцию echo, когда действует буферизация вывода, сообщение "Привет" будет сохранено в этой невидимой удерживающей ячейке, которая и называется буфером. И она не будет отображаться на странице, пока вы не получите ее содержимое и не отправите его в браузер.</p>
14 <p>Однако, если вы запустите функцию echo, когда действует буферизация вывода, сообщение "Привет" будет сохранено в этой невидимой удерживающей ячейке, которая и называется буфером. И она не будет отображаться на странице, пока вы не получите ее содержимое и не отправите его в браузер.</p>
15 <blockquote><h4>Станьте профессиональным PHP-разработчиком с нуля за 10 месяцев</h4>
15 <blockquote><h4>Станьте профессиональным PHP-разработчиком с нуля за 10 месяцев</h4>
16 <p>На Хекслете есть профессия<a>"PHP-разработчик"</a>. Пройдите ее, чтобы изучить один из самых известных языков программирования, освоить популярные фреймворки и создать большое портфолио с проектами на GitHub.</p>
16 <p>На Хекслете есть профессия<a>"PHP-разработчик"</a>. Пройдите ее, чтобы изучить один из самых известных языков программирования, освоить популярные фреймворки и создать большое портфолио с проектами на GitHub.</p>
17 </blockquote><h2>Какие есть функции для работы буферизации вывода PHP</h2>
17 </blockquote><h2>Какие есть функции для работы буферизации вывода PHP</h2>
18 <p>Существует несколько основных функций для работы буферизации вывода php:</p>
18 <p>Существует несколько основных функций для работы буферизации вывода php:</p>
19 <p>ob_start() запускает буферизацию вывода. Другими словами, она создает буфер (невидимую ячейку), в которой будет храниться весь вывод после ее вызова.</p>
19 <p>ob_start() запускает буферизацию вывода. Другими словами, она создает буфер (невидимую ячейку), в которой будет храниться весь вывод после ее вызова.</p>
20 <p>ob_get_contents() собирает все данные, которые находятся в буфере после выполнения команды ob_start. Обычно с помощью этой функции данные из буфера присваивают переменной.</p>
20 <p>ob_get_contents() собирает все данные, которые находятся в буфере после выполнения команды ob_start. Обычно с помощью этой функции данные из буфера присваивают переменной.</p>
21 <p>ob_clean() удаляет все из буфера. Обратите внимание, что она ничего не выводит - просто очищает буфер.</p>
21 <p>ob_clean() удаляет все из буфера. Обратите внимание, что она ничего не выводит - просто очищает буфер.</p>
22 <p>ob_flush() выводит содержимое из буфера. Обратите внимание, что она не очищает буфер.</p>
22 <p>ob_flush() выводит содержимое из буфера. Обратите внимание, что она не очищает буфер.</p>
23 <p>ob_end_clean() очищает буфер и отключает буферизацию вывода.</p>
23 <p>ob_end_clean() очищает буфер и отключает буферизацию вывода.</p>
24 <p>ob_end_flush() выводит содержимое из буфера и завершает буферизацию вывода. Буфер не стирается.</p>
24 <p>ob_end_flush() выводит содержимое из буфера и завершает буферизацию вывода. Буфер не стирается.</p>
25 <p>Самое важное в использовании функций буферизации вывода - это то, где вы их размещаете. Вам нужно запустить буфер с помощью ob_start в нужном месте, и вывести буфер либо на страницу, либо в переменную, прежде чем вы его очистите.</p>
25 <p>Самое важное в использовании функций буферизации вывода - это то, где вы их размещаете. Вам нужно запустить буфер с помощью ob_start в нужном месте, и вывести буфер либо на страницу, либо в переменную, прежде чем вы его очистите.</p>
26 <h2>Зачем использовать буферизацию PHP</h2>
26 <h2>Зачем использовать буферизацию PHP</h2>
27 <p>Возможно вы никогда не будете ее использовать и захотите буферизацию вывода отключить, особенно если вы не являетесь разработчиком плагинов WordPress или не пишете собственные приложения PHP. Для тех, кто не делает ни того, ни другого, я приведу несколько примеров, когда эта концепция все-таки может пригодиться.</p>
27 <p>Возможно вы никогда не будете ее использовать и захотите буферизацию вывода отключить, особенно если вы не являетесь разработчиком плагинов WordPress или не пишете собственные приложения PHP. Для тех, кто не делает ни того, ни другого, я приведу несколько примеров, когда эта концепция все-таки может пригодиться.</p>
28 <p>Вы когда-нибудь видели такую ошибку?</p>
28 <p>Вы когда-нибудь видели такую ошибку?</p>
29 <p>Для тех, кто не знаком с определением HTTP-заголовка - это информация, отправляемая с сервера по HTTP-запросу. Она сообщает браузеру, какие данные передаются, прежде чем попадут к нему.</p>
29 <p>Для тех, кто не знаком с определением HTTP-заголовка - это информация, отправляемая с сервера по HTTP-запросу. Она сообщает браузеру, какие данные передаются, прежде чем попадут к нему.</p>
30 <p>HTTP-заголовки содержат данные про тип содержимого, дату его последнего изменения, тип отправившего запрос сервера и многое другое. Загвоздка в том, что HTTP-заголовки необходимо отправлять до того, как с сервера будут отправлены какие-либо выходные данные.</p>
30 <p>HTTP-заголовки содержат данные про тип содержимого, дату его последнего изменения, тип отправившего запрос сервера и многое другое. Загвоздка в том, что HTTP-заголовки необходимо отправлять до того, как с сервера будут отправлены какие-либо выходные данные.</p>
31 <p>И еще один пример: предположим, ваше приложение сохраняет данные для входа пользователя в файлы cookie - в специальный тип HTTP-заголовка. Эти данные должны отправляться в браузер раньше любых других данных сайта или приложения. При этом, в зависимости от того, как устроена ваша программа, код cookie не обязан находиться в самом начале файла.</p>
31 <p>И еще один пример: предположим, ваше приложение сохраняет данные для входа пользователя в файлы cookie - в специальный тип HTTP-заголовка. Эти данные должны отправляться в браузер раньше любых других данных сайта или приложения. При этом, в зависимости от того, как устроена ваша программа, код cookie не обязан находиться в самом начале файла.</p>
32 <p>И тут как раз вступает в действие буферизация вывода, которая позволяет сказать: "Привет, PHP! Я скажу, когда нужно отправить вывод сайта после того, как будут обработаны cookie-файлы". В ином случае вы просто столкнетесь с ошибкой, про которую я писала чуть выше.</p>
32 <p>И тут как раз вступает в действие буферизация вывода, которая позволяет сказать: "Привет, PHP! Я скажу, когда нужно отправить вывод сайта после того, как будут обработаны cookie-файлы". В ином случае вы просто столкнетесь с ошибкой, про которую я писала чуть выше.</p>
33 <p>Обратите внимание, что появление этой ошибки может указывать и на использование плохих практик написания кода с точки зрения структуры вашего приложения. Например, такая ошибка может выпадать из-за конфликтов с другими плагинами.</p>
33 <p>Обратите внимание, что появление этой ошибки может указывать и на использование плохих практик написания кода с точки зрения структуры вашего приложения. Например, такая ошибка может выпадать из-за конфликтов с другими плагинами.</p>
34 <h2>Итог</h2>
34 <h2>Итог</h2>
35 <p>При использовании плагинов или фреймворков мы постоянно встречаемся с кодом, про который вообще ничего не знаем - как он работает и даже для чего нужен. Мы просто знаем, как его использовать, и делаем это. Однако иногда все-таки нужно понять, что это за код и зачем он вообще нужен. В случае с буферизацией вывода PHP все точно так же. Сохраните себе эту статью, чтобы вернуться к материалу, если возникнут трудности с буферизацией.</p>
35 <p>При использовании плагинов или фреймворков мы постоянно встречаемся с кодом, про который вообще ничего не знаем - как он работает и даже для чего нужен. Мы просто знаем, как его использовать, и делаем это. Однако иногда все-таки нужно понять, что это за код и зачем он вообще нужен. В случае с буферизацией вывода PHP все точно так же. Сохраните себе эту статью, чтобы вернуться к материалу, если возникнут трудности с буферизацией.</p>
36 <blockquote><h3>Читайте также:</h3>
36 <blockquote><h3>Читайте также:</h3>
37 <p>Как работать с базами данных в PHP<a>с помощью модуля PDO</a></p>
37 <p>Как работать с базами данных в PHP<a>с помощью модуля PDO</a></p>
38 </blockquote>
38 </blockquote>