phpsoftbox / http-emitter
HTTP response emitter for the PhpSoftBox framework
Requires
- php: ^8.5
- psr/http-message: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpsoftbox/cli-app: dev-master
- phpsoftbox/cs-fixer: ^1.1.0
- phpsoftbox/http-message: dev-master
- phpunit/phpunit: ^11.2
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-02 14:13:54 UTC
README
Компонент выводит готовый PSR-7 response в PHP SAPI. Он устанавливает status line и заголовки, после чего потоково передаёт body клиенту.
Использование
use PhpSoftBox\Http\Emitter\SapiEmitter; $emitter = new SapiEmitter(); $emitter->emit($response);
Вызов emit() должен быть последним этапом обработки запроса. До него приложение не
должно отправлять данные клиенту.
Статус и заголовки
Статус берётся из переданного response и сохраняется при отправке каждого заголовка.
Это важно, например, для Inertia-ответа 409 Conflict с заголовком Location: PHP не
заменит его автоматически на 302 Found.
Каждое значение PSR-7 заголовка отправляется отдельно. Поэтому несколько значений
Set-Cookie не объединяются через запятую.
Если PHP уже отправил заголовки, emitter выбросит
HeadersAlreadySentException с доступным местом первого вывода. Продолжать эмиссию в
такой ситуации небезопасно: status и заголовки response уже нельзя доставить клиенту.
Body
Body читается из StreamInterface частями, поэтому файл или большой экспорт не
загружается в память целиком. Seekable stream перед чтением перематывается в начало;
non-seekable stream читается с текущей позиции.
Emitter не выводит body для статусов, которые его не допускают:
- информационные
1xx; 204 No Content;205 Reset Content;304 Not Modified.
Обработка HEAD остаётся ответственностью HTTP application: emitter получает только
response и не знает метод исходного запроса.