Headers.php (3404B)
1 <?php 2 /** 3 * Slim - a micro PHP 5 framework 4 * 5 * @author Josh Lockhart <info@slimframework.com> 6 * @copyright 2011 Josh Lockhart 7 * @link http://www.slimframework.com 8 * @license http://www.slimframework.com/license 9 * @version 2.4.2 10 * @package Slim 11 * 12 * MIT LICENSE 13 * 14 * Permission is hereby granted, free of charge, to any person obtaining 15 * a copy of this software and associated documentation files (the 16 * "Software"), to deal in the Software without restriction, including 17 * without limitation the rights to use, copy, modify, merge, publish, 18 * distribute, sublicense, and/or sell copies of the Software, and to 19 * permit persons to whom the Software is furnished to do so, subject to 20 * the following conditions: 21 * 22 * The above copyright notice and this permission notice shall be 23 * included in all copies or substantial portions of the Software. 24 * 25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 29 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 30 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 31 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 32 */ 33 namespace Slim\Http; 34 35 /** 36 * HTTP Headers 37 * 38 * @package Slim 39 * @author Josh Lockhart 40 * @since 1.6.0 41 */ 42 class Headers extends \Slim\Helper\Set 43 { 44 /******************************************************************************** 45 * Static interface 46 *******************************************************************************/ 47 48 /** 49 * Special-case HTTP headers that are otherwise unidentifiable as HTTP headers. 50 * Typically, HTTP headers in the $_SERVER array will be prefixed with 51 * `HTTP_` or `X_`. These are not so we list them here for later reference. 52 * 53 * @var array 54 */ 55 protected static $special = array( 56 'CONTENT_TYPE', 57 'CONTENT_LENGTH', 58 'PHP_AUTH_USER', 59 'PHP_AUTH_PW', 60 'PHP_AUTH_DIGEST', 61 'AUTH_TYPE' 62 ); 63 64 /** 65 * Extract HTTP headers from an array of data (e.g. $_SERVER) 66 * @param array $data 67 * @return array 68 */ 69 public static function extract($data) 70 { 71 $results = array(); 72 foreach ($data as $key => $value) { 73 $key = strtoupper($key); 74 if (strpos($key, 'X_') === 0 || strpos($key, 'HTTP_') === 0 || in_array($key, static::$special)) { 75 if ($key === 'HTTP_CONTENT_LENGTH') { 76 continue; 77 } 78 $results[$key] = $value; 79 } 80 } 81 82 return $results; 83 } 84 85 /******************************************************************************** 86 * Instance interface 87 *******************************************************************************/ 88 89 /** 90 * Transform header name into canonical form 91 * @param string $key 92 * @return string 93 */ 94 protected function normalizeKey($key) 95 { 96 $key = strtolower($key); 97 $key = str_replace(array('-', '_'), ' ', $key); 98 $key = preg_replace('#^http #', '', $key); 99 $key = ucwords($key); 100 $key = str_replace(' ', '-', $key); 101 102 return $key; 103 } 104 }