Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class HeaderParser
00016 {
00017 private $headers = array();
00018 private $currentHeader = null;
00019
00020 public static function create()
00021 {
00022 return new self;
00023 }
00024
00029 public function parse($data)
00030 {
00031 $lines = explode("\n", $data);
00032
00033 foreach ($lines as $line) {
00034 $this->doLine($line);
00035 }
00036
00037 return $this;
00038 }
00039
00040 public function doLine($line)
00041 {
00042 $line = trim($line, "\r\n");
00043 $matches = array();
00044
00045 if (preg_match("/^([\w-]+):\s+(.+)/", $line, $matches)) {
00046
00047 $name = strtolower($matches[1]);
00048 $value = $matches[2];
00049 $this->currentHeader = $name;
00050
00051 if (isset($this->headers[$name])) {
00052 if (!is_array($this->headers[$name])) {
00053 $this->headers[$name] = array($this->headers[$name]);
00054 }
00055 $this->headers[$name][] = $value;
00056 } else {
00057 $this->headers[$name] = $value;
00058 }
00059
00060 } elseif (
00061 preg_match("/^\s+(.+)$/", $line, $matches)
00062 && $this->currentHeader !== null
00063 ) {
00064 if (is_array($this->headers[$this->currentHeader])) {
00065 $lastKey = count($this->headers[$this->currentHeader]) - 1;
00066 $this->headers[$this->currentHeader][$lastKey]
00067 .= $matches[1];
00068 } else {
00069 $this->headers[$this->currentHeader] .= $matches[1];
00070 }
00071 }
00072
00073 return $this;
00074 }
00075
00079 public function getHeaders()
00080 {
00081 return $this->headers;
00082 }
00083
00084 public function hasHeader($name)
00085 {
00086 return isset($this->headers[strtolower($name)]);
00087 }
00088
00089 public function getHeader($name)
00090 {
00091 return $this->headers[strtolower($name)];
00092 }
00093 }
00094 ?>