58 lines
1.4 KiB
PHP
58 lines
1.4 KiB
PHP
<?php
|
|
/**
|
|
* @package Bicycle
|
|
* @author Egor Isaev
|
|
* @description HTTP/Header.php
|
|
* @copyright (c) 04/06/2026
|
|
*/
|
|
|
|
namespace System\Classes\HTTP;
|
|
|
|
use ArrayObject;
|
|
|
|
/**
|
|
* Коллекция HTTP-заголовков. Умеет отдавать себя в RFC-формате и отправлять.
|
|
*/
|
|
class Header extends ArrayObject
|
|
{
|
|
/**
|
|
* @param array $input Ассоциативный массив заголовков
|
|
*/
|
|
public function __construct(array $input = [])
|
|
{
|
|
parent::__construct($input);
|
|
}
|
|
|
|
/**
|
|
* Сериализует заголовки в RFC-формат (key: value, разделённые CRLF).
|
|
*
|
|
* @return string
|
|
*/
|
|
public function __toString(): string
|
|
{
|
|
$output = '';
|
|
|
|
foreach ($this as $key => $value) {
|
|
$output .= $key . ': ' . (is_array($value) ? implode(', ', $value) : $value) . "\r\n";
|
|
}
|
|
|
|
return $output . "\r\n";
|
|
}
|
|
|
|
/**
|
|
* Отправляет заголовки клиенту, если они ещё не отправлены.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function send(): void
|
|
{
|
|
if (headers_sent()) {
|
|
return;
|
|
}
|
|
|
|
foreach ($this as $key => $value) {
|
|
header($key . ': ' . (is_array($value) ? implode(', ', $value) : $value));
|
|
}
|
|
}
|
|
}
|