1: <?php
2:
3: namespace PHPixie\HTTP;
4: use Psr\Http\Message\StreamInterface;
5:
6: 7: 8:
9: class Output
10: {
11: 12: 13: 14: 15: 16:
17: public function response($response, $context = null)
18: {
19: $responseMessage = $response->asResponseMessage($context);
20: $this->responseMessage($responseMessage);
21: }
22:
23: 24: 25: 26:
27: public function responseMessage($responseMessage)
28: {
29: $this->statusHeader(
30: $responseMessage->getStatusCode(),
31: $responseMessage->getReasonPhrase(),
32: $responseMessage->getProtocolVersion()
33: );
34:
35: $this->headers($responseMessage->getHeaders());
36: $this->body($responseMessage->getBody());
37: }
38:
39: 40: 41: 42:
43: protected function headers($headers)
44: {
45: foreach($headers as $name => $lines) {
46: foreach($lines as $key => $line) {
47: $this->header("$name: $line", false);
48: }
49: }
50: }
51:
52: 53: 54: 55:
56: protected function header($header, $replace = true)
57: {
58: header($header, $replace);
59: }
60:
61: 62: 63:
64: protected function output($string)
65: {
66: echo $string;
67: }
68:
69: 70: 71:
72: protected function fpassthru($handle)
73: {
74: fpassthru($handle);
75: }
76:
77: 78: 79:
80: protected function body($stream)
81: {
82: if($stream instanceof Messages\Stream\Implementation) {
83: $stream->rewind();
84: $this->fpassthru($stream->resource());
85:
86: }else{
87: $this->output((string) $stream);
88: }
89: }
90:
91: 92: 93: 94: 95:
96: protected function statusHeader($statusCode, $reasonPhrase, $protocolVersion = '1.1')
97: {
98: if($protocolVersion === null) {
99: $protocolVersion = '1.1';
100: }
101:
102: $this->header("HTTP/{$protocolVersion} $statusCode $reasonPhrase");
103: }
104: }