Когда я вызываю ob_get_status(), я получаю массив, в котором помимо прочего присутствуют строка buffer_size и chunk_size.
Что такое chunk_size я, кажется понял. Это значение output_buffering из php.ini либо которое задаётся через ob_start().
А вот что такое buffer_size я не понимаю? Я заметил, что его значение меняется в зависимости от заданного значения chunk_size.
Что это такое? Почему это зависит от chunk_size? Где в документации это отражено?
В документации, как видно - никак не отражено. Ну и ладно, пошли так почитаем. Как известно, PHP является проектом с открытым исходным кодом и написан на C.
ob_get_status начинается в main/output.c на 1495 строке (на примере PHP 7.2.2)full_status, то массив результата заполняется немного выше в методе php_output_stack_apply_status, который вызывает в свою очередь php_output_handler_statusbuffer_size и buffer_used - это свойства структуры php_output_bufferКак используются эти свойства можно почитать в этих же двух файлах, но суть сведётся к одному выводу:
Память операционной системой выделяется блоками, относительно быстродействия непосредственно кода выделение блока памяти более дорогостоящая операция. И что более неприятно для буфера вывода, если блока памяти не хватило и надо ещё несколько байт - возможно новый блок окажется в другом месте и потребуется копировать все данные в новое место. Поэтому в C для мест, где вероятно понадобится увеличение объёма данных нередко запрашивают буфер больше чем требуется в самом начале.
В итоге, buffer_size - это именно зарезервированный объём памяти в байтах, который сейчас выделен для хранения данных. buffer_used - сколько байт этого буфера занято. Показываются просто детали низкоуровневой реализации.
С chunk_size непосредственно не связан, но при достижении размера chunk_size данные отправляются на вывод, поэтому если chunk_size был задан - то мы заранее знаем максимальный объём необходимой памяти и можем выделить буфер ровно этого размера. Дальше ещё чуток логики - блок округляется до 4кб (для целей выравнивания блока по размеру страниц памяти операционной системы, судя по именам констант), если же chunk_size указан не был - то выделяется для начала 16кб.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники