diff options
Diffstat (limited to 'core/Url.php')
-rw-r--r-- | core/Url.php | 131 |
1 files changed, 36 insertions, 95 deletions
diff --git a/core/Url.php b/core/Url.php index cc6164ac26..7ba48bbc99 100644 --- a/core/Url.php +++ b/core/Url.php @@ -1,11 +1,11 @@ <?php /** * Piwik - Open source web analytics - * + * * @link http://piwik.org * @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later * @version $Id$ - * + * * @category Piwik * @package Piwik */ @@ -26,12 +26,11 @@ class Piwik_Url */ static public function getCurrentUrl() { - return self::getCurrentScheme() . '://' - . self::getCurrentHost() - . self::getCurrentScriptName() - . self::getCurrentQueryString(); + return self::getCurrentHost() + . self::getCurrentScriptName() + . self::getCurrentQueryString(); } - + /** * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" * will return "http://example.org/dir1/dir2/index.php" @@ -40,11 +39,10 @@ class Piwik_Url */ static public function getCurrentUrlWithoutQueryString() { - return self::getCurrentScheme() . '://' - . self::getCurrentHost() - . self::getCurrentScriptName(); + return self::getCurrentHost() + . self::getCurrentScriptName() ; } - + /** * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" * will return "http://example.org/dir1/dir2/" @@ -53,9 +51,9 @@ class Piwik_Url */ static public function getCurrentUrlWithoutFileName() { - return self::getCurrentScheme() . '://' - . self::getCurrentHost() - . self::getCurrentScriptPath(); + $host = self::getCurrentHost(); + $urlDir = self::getCurrentScriptPath(); + return $host.$urlDir; } /** @@ -78,7 +76,7 @@ class Piwik_Url } return $urlDir; } - + /** * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" * will return "/dir1/dir2/index.php" @@ -108,56 +106,41 @@ class Piwik_Url { $url = $_SERVER['SCRIPT_NAME']; } - - if($url[0] !== '/') - { - $url = '/' . $url; - } return $url; } /** - * If the current URL is 'http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" - * will return 'http' + * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" + * will return "http://example.org" * - * @return string 'https' or 'http' + * @return string */ - static public function getCurrentScheme() + static public function getCurrentHost() { if(isset($_SERVER['HTTPS']) - && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] === true) + && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] === true) ) { - $scheme = 'https'; + $url = 'https'; } - else + else { - $scheme = 'http'; + $url = 'http'; } - return $scheme; - } - - /** - * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" - * will return "http://example.org" - * - * @return string - */ - static public function getCurrentHost() - { - if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) + + $url .= '://'; + + if(isset($_SERVER['HTTP_HOST'])) { - return Piwik_Common::getFirstIpFromList($_SERVER['HTTP_X_FORWARDED_HOST']); + $url .= $_SERVER['HTTP_HOST']; } - - if(isset($_SERVER['HTTP_HOST'])) + else { - return $_SERVER['HTTP_HOST']; + $url .= 'unknown'; } - - return 'unknown'; + return $url; } - + /** * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" * will return "?param1=value1¶m2=value2" @@ -174,7 +157,7 @@ class Piwik_Url } return $url; } - + /** * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2" * will return @@ -190,7 +173,7 @@ class Piwik_Url $urlValues = Piwik_Common::getArrayFromQueryString($queryString); return $urlValues; } - + /** * Given an array of name-values, it will return the current query string * with the new requested parameter key-values; @@ -213,7 +196,7 @@ class Piwik_Url } return ''; } - + /** * Given an array of parameters name->value, returns the query string. * Also works with array values using the php array syntax for GET parameters. @@ -245,7 +228,7 @@ class Piwik_Url $query = substr($query, 0, -1); return $query; } - + /** * Redirects the user to the Referer if found. * If the user doesn't have a referer set, it redirects to the current URL without query string. @@ -259,7 +242,7 @@ class Piwik_Url } self::redirectToUrl(self::getCurrentUrlWithoutQueryString()); } - + /** * Redirects the user to the specified URL * @@ -270,7 +253,7 @@ class Piwik_Url header("Location: $url"); exit; } - + /** * Returns the HTTP_REFERER header, false if not found. * @@ -284,46 +267,4 @@ class Piwik_Url } return false; } - - /** - * Is the URL on the same host and in the same script path? - * - * @param string $url - * @return bool True if local; false otherwise. - */ - static public function isLocalUrl($url) - { - // handle case-sensitivity differences - $pathContains = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? 'stripos' : 'strpos'; - - // test the scheme/protocol portion of the reconstructed "current" URL - if(stripos($url, 'http://') === 0 || stripos($url, 'https://') === 0) - { - // determine the offset to begin the comparison - $offset = strpos($url, '://'); - $current = strstr(self::getCurrentUrlWithoutFileName(), '://'); - if($pathContains($url, $current, $offset) === $offset) - { - return true; - } - } - - return false; - } - - /** - * Get local referer, i.e., on the same host and in the same script path. - * - * @return string|false - */ - static public function getLocalReferer() - { - // verify that the referer contains the current URL (minus the filename & query parameters), http://example.org/dir1/dir2/ - $referer = self::getReferer(); - if($referer !== false && self::isLocalUrl($referer)) { - return $referer; - } - - return false; - } } |