Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
RequestMatcher.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Component\HttpFoundation;
013
014 /**
015 * RequestMatcher compares a pre-defined set of checks against a Request instance.
016 *
017 * @author Fabien Potencier <fabien@symfony.com>
018 */
019 class RequestMatcher implements RequestMatcherInterface
020 {
021 /**
022 * @var string|null
023 */
024 private $path;
025
026 /**
027 * @var string|null
028 */
029 private $host;
030
031 /**
032 * @var string[]
033 */
034 private $methods = array();
035
036 /**
037 * @var string[]
038 */
039 private $ips = array();
040
041 /**
042 * @var array
043 */
044 private $attributes = array();
045
046 /**
047 * @var string[]
048 */
049 private $schemes = array();
050
051 /**
052 * @param string|null $path
053 * @param string|null $host
054 * @param string|string[]|null $methods
055 * @param string|string[]|null $ips
056 * @param array $attributes
057 * @param string|string[]|null $schemes
058 */
059 public function __construct($path = null, $host = null, $methods = null, $ips = null, array $attributes = array(), $schemes = null)
060 {
061 $this->matchPath($path);
062 $this->matchHost($host);
063 $this->matchMethod($methods);
064 $this->matchIps($ips);
065 $this->matchScheme($schemes);
066
067 foreach ($attributes as $k => $v) {
068 $this->matchAttribute($k, $v);
069 }
070 }
071
072 /**
073 * Adds a check for the HTTP scheme.
074 *
075 * @param string|string[]|null $scheme An HTTP scheme or an array of HTTP schemes
076 */
077 public function matchScheme($scheme)
078 {
079 $this->schemes = null !== $scheme ? array_map('strtolower', (array) $scheme) : array();
080 }
081
082 /**
083 * Adds a check for the URL host name.
084 *
085 * @param string|null $regexp A Regexp
086 */
087 public function matchHost($regexp)
088 {
089 $this->host = $regexp;
090 }
091
092 /**
093 * Adds a check for the URL path info.
094 *
095 * @param string|null $regexp A Regexp
096 */
097 public function matchPath($regexp)
098 {
099 $this->path = $regexp;
100 }
101
102 /**
103 * Adds a check for the client IP.
104 *
105 * @param string $ip A specific IP address or a range specified using IP/netmask like 192.168.1.0/24
106 */
107 public function matchIp($ip)
108 {
109 $this->matchIps($ip);
110 }
111
112 /**
113 * Adds a check for the client IP.
114 *
115 * @param string|string[]|null $ips A specific IP address or a range specified using IP/netmask like 192.168.1.0/24
116 */
117 public function matchIps($ips)
118 {
119 $this->ips = null !== $ips ? (array) $ips : array();
120 }
121
122 /**
123 * Adds a check for the HTTP method.
124 *
125 * @param string|string[]|null $method An HTTP method or an array of HTTP methods
126 */
127 public function matchMethod($method)
128 {
129 $this->methods = null !== $method ? array_map('strtoupper', (array) $method) : array();
130 }
131
132 /**
133 * Adds a check for request attribute.
134 *
135 * @param string $key The request attribute name
136 * @param string $regexp A Regexp
137 */
138 public function matchAttribute($key, $regexp)
139 {
140 $this->attributes[$key] = $regexp;
141 }
142
143 /**
144 * {@inheritdoc}
145 */
146 public function matches(Request $request)
147 {
148 if ($this->schemes && !in_array($request->getScheme(), $this->schemes, true)) {
149 return false;
150 }
151
152 if ($this->methods && !in_array($request->getMethod(), $this->methods, true)) {
153 return false;
154 }
155
156 foreach ($this->attributes as $key => $pattern) {
157 if (!preg_match('{'.$pattern.'}', $request->attributes->get($key))) {
158 return false;
159 }
160 }
161
162 if (null !== $this->path && !preg_match('{'.$this->path.'}', rawurldecode($request->getPathInfo()))) {
163 return false;
164 }
165
166 if (null !== $this->host && !preg_match('{'.$this->host.'}i', $request->getHost())) {
167 return false;
168 }
169
170 if (IpUtils::checkIp($request->getClientIp(), $this->ips)) {
171 return true;
172 }
173
174 // Note to future implementors: add additional checks above the
175 // foreach above or else your check might not be run!
176 return count($this->ips) === 0;
177 }
178 }
179