Mercurial > hg > cmmr2012-drupal-site
diff vendor/zendframework/zend-diactoros/src/Response/SapiEmitterTrait.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | 5311817fb629 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/zendframework/zend-diactoros/src/Response/SapiEmitterTrait.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,109 @@ +<?php +/** + * Zend Framework (http://framework.zend.com/) + * + * @see http://github.com/zendframework/zend-diactoros for the canonical source repository + * @copyright Copyright (c) 2015-2016 Zend Technologies USA Inc. (http://www.zend.com) + * @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License + */ + +namespace Zend\Diactoros\Response; + +use Psr\Http\Message\ResponseInterface; + +trait SapiEmitterTrait +{ + /** + * Inject the Content-Length header if is not already present. + * + * @param ResponseInterface $response + * @return ResponseInterface + */ + private function injectContentLength(ResponseInterface $response) + { + if (! $response->hasHeader('Content-Length')) { + // PSR-7 indicates int OR null for the stream size; for null values, + // we will not auto-inject the Content-Length. + if (null !== $response->getBody()->getSize()) { + return $response->withHeader('Content-Length', (string) $response->getBody()->getSize()); + } + } + + return $response; + } + + /** + * Emit the status line. + * + * Emits the status line using the protocol version and status code from + * the response; if a reason phrase is available, it, too, is emitted. + * + * @param ResponseInterface $response + */ + private function emitStatusLine(ResponseInterface $response) + { + $reasonPhrase = $response->getReasonPhrase(); + header(sprintf( + 'HTTP/%s %d%s', + $response->getProtocolVersion(), + $response->getStatusCode(), + ($reasonPhrase ? ' ' . $reasonPhrase : '') + )); + } + + /** + * Emit response headers. + * + * Loops through each header, emitting each; if the header value + * is an array with multiple values, ensures that each is sent + * in such a way as to create aggregate headers (instead of replace + * the previous). + * + * @param ResponseInterface $response + */ + private function emitHeaders(ResponseInterface $response) + { + foreach ($response->getHeaders() as $header => $values) { + $name = $this->filterHeader($header); + $first = $name === 'Set-Cookie' ? false : true; + foreach ($values as $value) { + header(sprintf( + '%s: %s', + $name, + $value + ), $first); + $first = false; + } + } + } + + /** + * Loops through the output buffer, flushing each, before emitting + * the response. + * + * @param int|null $maxBufferLevel Flush up to this buffer level. + */ + private function flush($maxBufferLevel = null) + { + if (null === $maxBufferLevel) { + $maxBufferLevel = ob_get_level(); + } + + while (ob_get_level() > $maxBufferLevel) { + ob_end_flush(); + } + } + + /** + * Filter a header name to wordcase + * + * @param string $header + * @return string + */ + private function filterHeader($header) + { + $filtered = str_replace('-', ' ', $header); + $filtered = ucwords($filtered); + return str_replace(' ', '-', $filtered); + } +}