Viewing file: Header.php (4.24 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Guzzle\Http\Message;
use Guzzle\Common\Version; use Guzzle\Http\Message\Header\HeaderInterface;
/** * Represents a header and all of the values stored by that header */ class Header implements HeaderInterface { protected $values = array(); protected $header; protected $glue;
/** * @param string $header Name of the header * @param array|string $values Values of the header as an array or a scalar * @param string $glue Glue used to combine multiple values into a string */ public function __construct($header, $values = array(), $glue = ',') { $this->header = trim($header); $this->glue = $glue;
foreach ((array) $values as $value) { foreach ((array) $value as $v) { $this->values[] = $v; } } }
public function __toString() { return implode($this->glue . ' ', $this->toArray()); }
public function add($value) { $this->values[] = $value;
return $this; }
public function getName() { return $this->header; }
public function setName($name) { $this->header = $name;
return $this; }
public function setGlue($glue) { $this->glue = $glue;
return $this; }
public function getGlue() { return $this->glue; }
/** * Normalize the header to be a single header with an array of values. * * If any values of the header contains the glue string value (e.g. ","), then the value will be exploded into * multiple entries in the header. * * @return self */ public function normalize() { $values = $this->toArray();
for ($i = 0, $total = count($values); $i < $total; $i++) { if (strpos($values[$i], $this->glue) !== false) { // Explode on glue when the glue is not inside of a comma foreach (preg_split('/' . preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/', $values[$i]) as $v) { $values[] = trim($v); } unset($values[$i]); } }
$this->values = array_values($values);
return $this; }
public function hasValue($searchValue) { return in_array($searchValue, $this->toArray()); }
public function removeValue($searchValue) { $this->values = array_values(array_filter($this->values, function ($value) use ($searchValue) { return $value != $searchValue; }));
return $this; }
public function toArray() { return $this->values; }
public function count() { return count($this->toArray()); }
public function getIterator() { return new \ArrayIterator($this->toArray()); }
public function parseParams() { $params = $matches = array(); $callback = array($this, 'trimHeader');
// Normalize the header into a single array and iterate over all values foreach ($this->normalize()->toArray() as $val) { $part = array(); foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) { if (!preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) { continue; } $pieces = array_map($callback, $matches[0]); $part[$pieces[0]] = isset($pieces[1]) ? $pieces[1] : ''; } if ($part) { $params[] = $part; } }
return $params; }
/** * @deprecated * @codeCoverageIgnore */ public function hasExactHeader($header) { Version::warn(__METHOD__ . ' is deprecated'); return $this->header == $header; }
/** * @deprecated * @codeCoverageIgnore */ public function raw() { Version::warn(__METHOD__ . ' is deprecated. Use toArray()'); return $this->toArray(); }
/** * Trim a header by removing excess spaces and wrapping quotes * * @param $str * * @return string */ protected function trimHeader($str) { static $trimmed = "\"' \n\t";
return trim($str, $trimmed); } }
|