Created
February 3, 2011 06:21
-
-
Save hobodave/809120 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Set the base URL of the request; i.e., the segment leading to the script name | |
* | |
* E.g.: | |
* - /admin | |
* - /myapp | |
* - /subdir/index.php | |
* | |
* Do not use the full URI when providing the base. The following are | |
* examples of what not to use: | |
* - http://example.com/admin (should be just /admin) | |
* - http://example.com/subdir/index.php (should be just /subdir/index.php) | |
* | |
* If no $baseUrl is provided, attempts to determine the base URL from the | |
* environment, using SCRIPT_FILENAME, SCRIPT_NAME, PHP_SELF, and | |
* ORIG_SCRIPT_NAME in its determination. | |
* | |
* @param mixed $baseUrl | |
* @return Zend_Controller_Request_Http | |
*/ | |
public function setBaseUrl($baseUrl = null) | |
{ | |
if ((null !== $baseUrl) && !is_string($baseUrl)) { | |
return $this; | |
} | |
if ($baseUrl === null) { | |
$filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : ''; | |
if (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) { | |
$baseUrl = $_SERVER['SCRIPT_NAME']; | |
} elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) { | |
$baseUrl = $_SERVER['PHP_SELF']; | |
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) { | |
$baseUrl = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility | |
} else { | |
// Backtrack up the script_filename to find the portion matching | |
// php_self | |
$path = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : ''; | |
$file = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : ''; | |
$segs = explode('/', trim($file, '/')); | |
$segs = array_reverse($segs); | |
$index = 0; | |
$last = count($segs); | |
$baseUrl = ''; | |
do { | |
$seg = $segs[$index]; | |
$baseUrl = '/' . $seg . $baseUrl; | |
++$index; | |
} while (($last > $index) && (false !== ($pos = strpos($path, $baseUrl))) && (0 != $pos)); | |
} | |
// Does the baseUrl have anything in common with the request_uri? | |
$requestUri = $this->getRequestUri(); | |
if (0 === strpos($requestUri, $baseUrl)) { | |
// full $baseUrl matches | |
$this->_baseUrl = $baseUrl; | |
return $this; | |
} | |
if (0 === strpos($requestUri, dirname($baseUrl))) { | |
// directory portion of $baseUrl matches | |
$this->_baseUrl = rtrim(dirname($baseUrl), '/'); | |
return $this; | |
} | |
$truncatedRequestUri = $requestUri; | |
if (($pos = strpos($requestUri, '?')) !== false) { | |
$truncatedRequestUri = substr($requestUri, 0, $pos); | |
} | |
$basename = basename($baseUrl); | |
if (empty($basename) || !strpos($truncatedRequestUri, $basename)) { | |
// no match whatsoever; set it blank | |
$this->_baseUrl = ''; | |
return $this; | |
} | |
// If using mod_rewrite or ISAPI_Rewrite strip the script filename | |
// out of baseUrl. $pos !== 0 makes sure it is not matching a value | |
// from PATH_INFO or QUERY_STRING | |
if ((strlen($requestUri) >= strlen($baseUrl)) | |
&& ((false !== ($pos = strpos($requestUri, $baseUrl))) && ($pos !== 0))) | |
{ | |
$baseUrl = substr($requestUri, 0, $pos + strlen($baseUrl)); | |
} | |
} | |
$this->_baseUrl = rtrim($baseUrl, '/'); | |
return $this; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Set the REQUEST_URI on which the instance operates | |
* | |
* If no request URI is passed, uses the value in $_SERVER['REQUEST_URI'], | |
* $_SERVER['HTTP_X_REWRITE_URL'], or $_SERVER['ORIG_PATH_INFO'] + $_SERVER['QUERY_STRING']. | |
* | |
* @param string $requestUri | |
* @return Zend_Controller_Request_Http | |
*/ | |
public function setRequestUri($requestUri = null) | |
{ | |
if ($requestUri === null) { | |
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch | |
$requestUri = $_SERVER['HTTP_X_REWRITE_URL']; | |
} elseif ( | |
// IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem) | |
isset($_SERVER['IIS_WasUrlRewritten']) | |
&& $_SERVER['IIS_WasUrlRewritten'] == '1' | |
&& isset($_SERVER['UNENCODED_URL']) | |
&& $_SERVER['UNENCODED_URL'] != '' | |
) { | |
$requestUri = $_SERVER['UNENCODED_URL']; | |
} elseif (isset($_SERVER['REQUEST_URI'])) { | |
$requestUri = $_SERVER['REQUEST_URI']; | |
// Http proxy reqs setup request uri with scheme and host [and port] + the url path, only use url path | |
$schemeAndHttpHost = $this->getScheme() . '://' . $this->getHttpHost(); | |
if (strpos($requestUri, $schemeAndHttpHost) === 0) { | |
$requestUri = substr($requestUri, strlen($schemeAndHttpHost)); | |
} | |
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI | |
$requestUri = $_SERVER['ORIG_PATH_INFO']; | |
if (!empty($_SERVER['QUERY_STRING'])) { | |
$requestUri .= '?' . $_SERVER['QUERY_STRING']; | |
} | |
} else { | |
return $this; | |
} | |
} elseif (!is_string($requestUri)) { | |
return $this; | |
} else { | |
// Set GET items, if available | |
if (false !== ($pos = strpos($requestUri, '?'))) { | |
// Get key => value pairs and set $_GET | |
$query = substr($requestUri, $pos + 1); | |
parse_str($query, $vars); | |
$this->setQuery($vars); | |
} | |
} | |
$this->_requestUri = $requestUri; | |
return $this; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
perfect