コード例 #1
0
ファイル: Utilities.php プロジェクト: jstormes/simplesamlphp
 /**
  * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::resolvePath() instead.
  */
 public static function resolvePath($path, $base = NULL)
 {
     return \SimpleSAML\Utils\System::resolvePath($path, $base);
 }
コード例 #2
0
ファイル: HTTP.php プロジェクト: SysBind/simplesamlphp
 /**
  * Resolve a (possibly relative) URL relative to a given base URL.
  *
  * This function supports these forms of relative URLs:
  * - ^\w+: Absolute URL. E.g. "http://www.example.com:port/path?query#fragment".
  * - ^// Same protocol. E.g. "//www.example.com:port/path?query#fragment"
  * - ^/ Same protocol and host. E.g. "/path?query#fragment".
  * - ^? Same protocol, host and path, replace query string & fragment. E.g. "?query#fragment".
  * - ^# Same protocol, host, path and query, replace fragment. E.g. "#fragment".
  * - The rest: Relative to the base path.
  *
  * @param string $url The relative URL.
  * @param string $base The base URL. Defaults to the base URL of this installation of SimpleSAMLphp.
  *
  * @return string An absolute URL for the given relative URL.
  * @throws \InvalidArgumentException If the base URL cannot be parsed into a valid URL, or the given parameters
  *     are not strings.
  *
  * @author Olav Morken, UNINETT AS <*****@*****.**>
  * @author Jaime Perez, UNINETT AS <*****@*****.**>
  */
 public static function resolveURL($url, $base = null)
 {
     if ($base === null) {
         $base = self::getBaseURL();
     }
     if (!is_string($url) || !is_string($base)) {
         throw new \InvalidArgumentException('Invalid input parameters.');
     }
     if (!preg_match('/^((((\\w+:)\\/\\/[^\\/]+)(\\/[^?#]*))(?:\\?[^#]*)?)(?:#.*)?/', $base, $baseParsed)) {
         throw new \InvalidArgumentException('Unable to parse base url: ' . $base);
     }
     $baseDir = dirname($baseParsed[5] . 'filename');
     $baseScheme = $baseParsed[4];
     $baseHost = $baseParsed[3];
     $basePath = $baseParsed[2];
     $baseQuery = $baseParsed[1];
     if (preg_match('$^\\w+:$', $url)) {
         return $url;
     }
     if (substr($url, 0, 2) === '//') {
         return $baseScheme . $url;
     }
     $firstChar = substr($url, 0, 1);
     if ($firstChar === '/') {
         return $baseHost . $url;
     }
     if ($firstChar === '?') {
         return $basePath . $url;
     }
     if ($firstChar === '#') {
         return $baseQuery . $url;
     }
     // we have a relative path. Remove query string/fragment and save it as $tail
     $queryPos = strpos($url, '?');
     $fragmentPos = strpos($url, '#');
     if ($queryPos !== false || $fragmentPos !== false) {
         if ($queryPos === false) {
             $tailPos = $fragmentPos;
         } elseif ($fragmentPos === false) {
             $tailPos = $queryPos;
         } elseif ($queryPos < $fragmentPos) {
             $tailPos = $queryPos;
         } else {
             $tailPos = $fragmentPos;
         }
         $tail = substr($url, $tailPos);
         $dir = substr($url, 0, $tailPos);
     } else {
         $dir = $url;
         $tail = '';
     }
     $dir = System::resolvePath($dir, $baseDir);
     return $baseHost . $dir . $tail;
 }