Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class HttpUrl extends Url
00016 {
00017 protected $knownSubSchemes = array();
00018
00022 public static function create()
00023 {
00024 return new self;
00025 }
00026
00034 public function setHttpHost($host)
00035 {
00036 $parts = explode(':', $host, 2);
00037
00038 $this->setHost($parts[0]);
00039
00040 if (isset($parts[1]))
00041 $this->setPort($parts[1]);
00042
00043 return $this;
00044 }
00045
00046 public function ensureAbsolute()
00047 {
00048 $this->fixMistakenPath();
00049
00050 if (!$this->scheme && !$this->getAuthority()) {
00051 $this->scheme = 'http';
00052
00053 $segments = explode('/', $this->path);
00054
00055 if (!empty($segments[0])) {
00056
00057
00058 $this->setAuthority(array_shift($segments));
00059
00060 $this->setPath('/'.implode('/', $segments));
00061 }
00062 }
00063
00064 $this->fixAuthorityFromPath();
00065
00066 return $this;
00067 }
00068
00069 public function isValidScheme()
00070 {
00071 if (!parent::isValidScheme())
00072 return false;
00073
00074 if (
00075 $this->scheme
00076 && !in_array(strtolower($this->scheme), array('http', 'https'))
00077 )
00078 return false;
00079
00080 return true;
00081 }
00082
00083 public function isValidPort()
00084 {
00085 if (!parent::isValidPort())
00086 return false;
00087
00088 if (
00089 $this->port
00090 && !in_array($this->port, array(80, 443))
00091 && $this->port < 1024
00092 )
00093 return false;
00094
00095 return true;
00096 }
00097
00098 protected function isValidHostName()
00099 {
00100 if (!parent::isValidHostName())
00101 return false;
00102
00103 $charPattern = $this->charPattern(null);
00104
00105
00106
00107
00108 $topLabelPattern = '(([a-z])|([a-z]([a-z0-9-])*[a-z0-9]))\.?';
00109
00110 return (
00111 preg_match(
00112 "/^($charPattern*\.)?{$topLabelPattern}$/i",
00113 $this->host
00114 ) == 1
00115 );
00116 }
00117
00118 public function normalize()
00119 {
00120 parent::normalize();
00121
00122 $port = $this->getPort();
00123 $scheme = $this->getScheme();
00124
00125 if (
00126 ($scheme == 'http' && $port == '80')
00127 || ($scheme == 'https' && $port == '443')
00128 )
00129 $this->setPort(null);
00130
00131 if ($this->getPath() === null || $this->getPath() === '')
00132 $this->setPath('/');
00133
00134 return $this;
00135 }
00136
00137 public function makeComparable()
00138 {
00139 return $this->ensureAbsolute()->normalize()->setFragment(null);
00140 }
00141 }
00142 ?>