From d51bf4aa72cfff07ec2a4db89c6c0b9f84aad993 Mon Sep 17 00:00:00 2001 From: mepihindeveloper Date: Fri, 12 Mar 2021 21:29:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B5=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B3=D0=BB=D0=B0=D1=88=D0=B5=D0=BD=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=B2=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=B4=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= =?UTF-8?q?=20composer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 38 +++++++++++++++++- composer.json | 28 +++++++++++++ Headers.php => src/Headers.php | 39 +++++++++++-------- .../interfaces}/HeadersInterface.php | 5 +++ 5 files changed, 93 insertions(+), 18 deletions(-) create mode 100644 .gitignore create mode 100644 composer.json rename Headers.php => src/Headers.php (75%) rename {interfaces => src/interfaces}/HeadersInterface.php (95%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57872d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/vendor/ diff --git a/README.md b/README.md index ce6603c..725633d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,38 @@ # php-headers -Компонент для работы с заголовками в PHP + +Компонент для раб оты с заголовками в PHP + +# Структура + +``` +src/ +--- interfaces/ +--- Headers.php +``` + +В директории `interfaces` хранятся необходимые интерфейсы, которые необходимо имплементировать в при реализации +собственного класса `Headers`. + +Класс `Headers` реализует интерфейс `HeadersInterface` для управления заголовками. + +# Доступные методы + +| Метод | Аргументы | Возвращаемые данные | Исключения | Описание | +|---------------------|-----------------------------|---------------------|--------------------------|-----------------------------------------------------------------------------| +| set(array $params) | Заголовок(и) [key => value] | void | | Устанавливает заголовок(и) | +| add(array $params) | Заголовок(и) [key => value] | void | | Добавляет заголовок. Если заголовок уже существует, то он будет перезаписан | +| remove(string $key) | Заголовок | void | | Удаляет заголовок | +| removeAll | | void | | Удаляет все заголовки | +| has(string $key) | Заголовок | bool | | Проверяет наличие заголовка. Проверка идет на наличие ключа и значения | +| get(string $key) | Заголовок | string | InvalidArgumentException | Получает значение заголовка | +| getAll | | | | Получает все заголовки | + +# Конакты + +Вы можете связаться со мной в социальной сети ВКонтакте: [ВКонтакте: Максим Епихин](https://vk.com/maximepihin) + +Если удобно писать на почту, то можете воспользоваться этим адресом: mepihindeveloper@gmail.com + +Мой канал на YouTube, который посвящен разработке веб и игровых проектов: [YouTube: Максим Епихин](https://www.youtube.com/channel/UCKusRcoHUy6T4sei-rVzCqQ) + +Поддержать меня можно переводом на Яндекс.Деньги: [Денежный перевод](https://yoomoney.ru/to/410012382226565) \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..da61424 --- /dev/null +++ b/composer.json @@ -0,0 +1,28 @@ +{ + "name": "mepihindeveloper/php-headers", + "description": "Component for working with headers", + "type": "library", + "license": "MIT", + "keywords": [ + "component", + "class", + "php", + "headers" + ], + "authors": [ + { + "name": "mepihindeveloper", + "email": "mepihindeveloper@gmail.com" + } + ], + "require": { + "php": "^7.4|^8.0" + }, + "autoload": { + "psr-4": { + "mepihindeveloper\\components\\": "src/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/Headers.php b/src/Headers.php similarity index 75% rename from Headers.php rename to src/Headers.php index 19172df..a81a531 100644 --- a/Headers.php +++ b/src/Headers.php @@ -2,6 +2,11 @@ declare(strict_types = 1); +namespace mepihindeveloper\components; + +use InvalidArgumentException; +use mepihindeveloper\components\interfaces\HeadersInterface; + /** * Класс Headers * @@ -26,27 +31,26 @@ public function __construct() */ private function getAllHeaders(): array { - if (!function_exists('getallheaders')) + if (function_exists('getallheaders')) { + return getallheaders() !== false ? getallheaders() : []; + } + + if (!is_array($_SERVER)) { - if (!is_array($_SERVER)) - { - return []; - } - - $headers = []; - - foreach ($_SERVER as $name => $value) + return []; + } + + $headers = []; + + foreach ($_SERVER as $name => $value) + { + if (strpos($name, 'HTTP_') === 0) { - if (strpos($name, 'HTTP_') === 0) - { - $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; - } + $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } - - return $headers; } - return getallheaders() !== false ? getallheaders() : []; + return $headers; } /** @@ -91,6 +95,7 @@ public function remove(string $key): void { */ public function removeAll(): void { $this->headers = []; + header_remove(); } @@ -100,7 +105,7 @@ public function removeAll(): void { public function has(string $key): bool { $this->getAll(); - return isset($this->headers[$key]); + return array_key_exists($key, $this->headers); } /** diff --git a/interfaces/HeadersInterface.php b/src/interfaces/HeadersInterface.php similarity index 95% rename from interfaces/HeadersInterface.php rename to src/interfaces/HeadersInterface.php index 52e259b..363a313 100644 --- a/interfaces/HeadersInterface.php +++ b/src/interfaces/HeadersInterface.php @@ -1,6 +1,11 @@