/thoughtclinic/api/libs/Slim/Http/Headers.php

https://gitlab.com/suresh.b/TTC · PHP · 104 lines · 36 code · 7 blank · 61 comment · 5 complexity · 0a7d110427faa30606f9319f5ce3f3e3 MD5 · raw file

  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.3.5
  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. * HTTP Headers
  36. *
  37. * @package Slim
  38. * @author Josh Lockhart
  39. * @since 1.6.0
  40. */
  41. class Headers extends \Slim\Helper\Set
  42. {
  43. /********************************************************************************
  44. * Static interface
  45. *******************************************************************************/
  46. /**
  47. * Special-case HTTP headers that are otherwise unidentifiable as HTTP headers.
  48. * Typically, HTTP headers in the $_SERVER array will be prefixed with
  49. * `HTTP_` or `X_`. These are not so we list them here for later reference.
  50. *
  51. * @var array
  52. */
  53. protected static $special = array(
  54. 'CONTENT_TYPE',
  55. 'CONTENT_LENGTH',
  56. 'PHP_AUTH_USER',
  57. 'PHP_AUTH_PW',
  58. 'PHP_AUTH_DIGEST',
  59. 'AUTH_TYPE'
  60. );
  61. /**
  62. * Extract HTTP headers from an array of data (e.g. $_SERVER)
  63. * @param array $data
  64. * @return array
  65. */
  66. public static function extract($data)
  67. {
  68. $results = array();
  69. foreach ($data as $key => $value) {
  70. $key = strtoupper($key);
  71. if (strpos($key, 'X_') === 0 || strpos($key, 'HTTP_') === 0 || in_array($key, static::$special)) {
  72. if ($key === 'HTTP_CONTENT_TYPE' || $key === 'HTTP_CONTENT_LENGTH') {
  73. continue;
  74. }
  75. $results[$key] = $value;
  76. }
  77. }
  78. return $results;
  79. }
  80. /********************************************************************************
  81. * Instance interface
  82. *******************************************************************************/
  83. /**
  84. * Transform header name into canonical form
  85. * @param string $key
  86. * @return string
  87. */
  88. protected function normalizeKey($key)
  89. {
  90. $key = strtolower($key);
  91. $key = str_replace(array('-', '_'), ' ', $key);
  92. $key = preg_replace('#^http #', '', $key);
  93. $key = ucwords($key);
  94. $key = str_replace(' ', '-', $key);
  95. return $key;
  96. }
  97. }