Completed
Push — master ( 82d35b...d8071a )
by Dusan
02:15
created

ResponseSenderMiddleware::sendHeaders()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 4

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 18
ccs 11
cts 11
cp 1
rs 9.2
cc 4
eloc 10
nc 4
nop 1
crap 4
1
<?php
2
/**
3
 * This file is part of the response-sender-middleware package.
4
 *
5
 * Copyright (c) Dusan Vejin
6
 *
7
 * For full copyright and license information, please refer to the LICENSE file,
8
 * located at the package root folder.
9
 */
10
11
declare(strict_types=1);
12
13
namespace WeCodeIn\Http\ServerMiddleware\Middleware;
14
15
use Interop\Http\ServerMiddleware\DelegateInterface;
16
use Interop\Http\ServerMiddleware\MiddlewareInterface;
17
use Psr\Http\Message\ResponseInterface;
18
use Psr\Http\Message\ServerRequestInterface;
19
use Psr\Http\Message\StreamInterface;
20
21
/**
22
 * @author Dusan Vejin <[email protected]>
23
 */
24
class ResponseSenderMiddleware implements MiddlewareInterface
25
{
26 2
    public function process(ServerRequestInterface $request, DelegateInterface $delegate) : ResponseInterface
27
    {
28 2
        $response = $delegate->process($request);
29
30 2
        $this->sendHeaders($response);
31 2
        $this->sendOutput($response->getBody());
32
33 2
        return $response;
34
    }
35
36 2
    protected function sendHeaders(ResponseInterface $response)
37
    {
38 2
        if (headers_sent()) {
39 1
            return;
40
        }
41
42 1
        $protocolVersion = $response->getProtocolVersion();
43 1
        $statusCode = $response->getStatusCode();
44 1
        $reasonPhrase = $response->getReasonPhrase();
45
46 1
        header("HTTP/$protocolVersion $statusCode $reasonPhrase", true, $statusCode);
47
48 1
        foreach ($response->getHeaders() as $name => $values) {
49 1
            foreach ($values as $value) {
50 1
                header("$name: $value", false);
51
            }
52
        }
53 1
    }
54
55 2
    protected function sendOutput(StreamInterface $stream)
56
    {
57 2
        if ($stream->isSeekable()) {
58 2
            $stream->rewind();
59
        }
60
61 2
        while (false === $stream->eof()) {
62 2
            echo $stream->read(1024 * 8);
63
        }
64 2
    }
65
}
66