uri.php
来自「国外免费开源的内容管理系统」· PHP 代码 · 共 757 行 · 第 1/2 页
PHP
757 行
* @return array Query variables
* @since 1.5
*/
function getVar($name = null, $default=null)
{
if(isset($this->_vars[$name])) {
return $this->_vars[$name];
}
return $default;
}
/**
* Removes an item from the query string variables if it exists
*
* @access public
* @param string $name Name of variable to remove
* @since 1.5
*/
function delVar($name)
{
if (in_array($name, array_keys($this->_vars)))
{
unset ($this->_vars[$name]);
//empty the query
$this->_query = null;
}
}
/**
* Sets the query to a supplied string in format:
* foo=bar&x=y
*
* @access public
* @param mixed (array|string) $query The query string
* @since 1.5
*/
function setQuery($query)
{
if(!is_array($query)) {
if(strpos($query, '&') !== false)
{
$query = str_replace('&','&',$query);
}
parse_str($query, $this->_vars);
}
if(is_array($query)) {
$this->_vars = $query;
}
//empty the query
$this->_query = null;
}
/**
* Returns flat query string
*
* @access public
* @return string Query string
* @since 1.5
*/
function getQuery($toArray = false)
{
if($toArray) {
return $this->_vars;
}
//If the query is empty build it first
if(is_null($this->_query)) {
$this->_query = $this->buildQuery($this->_vars);
}
return $this->_query;
}
/**
* Build a query from a array (reverse of the PHP parse_str())
*
* @access public
* @return string The resulting query string
* @since 1.5
* @see parse_str()
*/
function buildQuery ($params, $akey = null)
{
if ( !is_array($params) || count($params) == 0 ) {
return false;
}
$out = array();
//reset in case we are looping
if( !isset($akey) && !count($out) ) {
unset($out);
$out = array();
}
foreach ( $params as $key => $val )
{
if ( is_array($val) ) {
$out[] = JURI::buildQuery($val,$key);
continue;
}
$thekey = ( !$akey ) ? $key : $akey.'[]';
$out[] = $thekey."=".urlencode($val);
}
return implode("&",$out);
}
/**
* Get URI scheme (protocol)
* ie. http, https, ftp, etc...
*
* @access public
* @return string The URI scheme
* @since 1.5
*/
function getScheme() {
return $this->_scheme;
}
/**
* Set URI scheme (protocol)
* ie. http, https, ftp, etc...
*
* @access public
* @param string $scheme The URI scheme
* @since 1.5
*/
function setScheme($scheme) {
$this->_scheme = $scheme;
}
/**
* Get URI username
* returns the username, or null if no username was specified
*
* @access public
* @return string The URI username
* @since 1.5
*/
function getUser() {
return $this->_user;
}
/**
* Set URI username
*
* @access public
* @param string $user The URI username
* @since 1.5
*/
function setUser($user) {
$this->_user = $user;
}
/**
* Get URI password
* returns the password, or null if no password was specified
*
* @access public
* @return string The URI password
* @since 1.5
*/
function getPass() {
return $this->_pass;
}
/**
* Set URI password
*
* @access public
* @param string $pass The URI password
* @since 1.5
*/
function setPass($pass) {
$this->_pass = $pass;
}
/**
* Get URI host
* returns the hostname/ip, or null if no hostname/ip was specified
*
* @access public
* @return string The URI host
* @since 1.5
*/
function getHost() {
return $this->_host;
}
/**
* Set URI host
*
* @access public
* @param string $host The URI host
* @since 1.5
*/
function setHost($host) {
$this->_host = $host;
}
/**
* Get URI port
* returns the port number, or null if no port was specified
*
* @access public
* @return int The URI port number
*/
function getPort() {
return (isset ($this->_port)) ? $this->_port : null;
}
/**
* Set URI port
*
* @access public
* @param int $port The URI port number
* @since 1.5
*/
function setPort($port) {
$this->_port = $port;
}
/**
* Gets the URI path string
*
* @access public
* @return string The URI path string
* @since 1.5
*/
function getPath() {
return $this->_path;
}
/**
* Set the URI path string
*
* @access public
* @param string $path The URI path string
* @since 1.5
*/
function setPath($path) {
$this->_path = $this->_cleanPath($path);
}
/**
* Get the URI archor string
* everything after the "#"
*
* @access public
* @return string The URI anchor string
* @since 1.5
*/
function getFragment() {
return $this->_fragment;
}
/**
* Set the URI anchor string
* everything after the "#"
*
* @access public
* @param string $anchor The URI anchor string
* @since 1.5
*/
function setFragment($anchor) {
$this->_fragment = $anchor;
}
/**
* Checks whether the current URI is using HTTPS
*
* @access public
* @return boolean True if using SSL via HTTPS
* @since 1.5
*/
function isSSL() {
return $this->getScheme() == 'https' ? true : false;
}
/**
* Resolves //, ../ and ./ from a path and returns
* the result. Eg:
*
* /foo/bar/../boo.php => /foo/boo.php
* /foo/bar/../../boo.php => /boo.php
* /foo/bar/.././/boo.php => /foo/boo.php
*
* @access private
* @param string $uri The URI path to clean
* @return string Cleaned and resolved URI path
* @since 1.5
*/
function _cleanPath($path)
{
$path = explode('/', preg_replace('#(/+)#', '/', $path));
for ($i = 0; $i < count($path); $i ++) {
if ($path[$i] == '.') {
unset ($path[$i]);
$path = array_values($path);
$i --;
}
elseif ($path[$i] == '..' AND ($i > 1 OR ($i == 1 AND $path[0] != ''))) {
unset ($path[$i]);
unset ($path[$i -1]);
$path = array_values($path);
$i -= 2;
}
elseif ($path[$i] == '..' AND $i == 1 AND $path[0] == '') {
unset ($path[$i]);
$path = array_values($path);
$i --;
} else {
continue;
}
}
return implode('/', $path);
}
/**
* Backwards compatibility function for parse_url function
*
* This function solves different bugs in PHP versions lower then
* 4.4, will be deprecated in future versions.
*
* @access private
* @return array Associative array containing the URL parts
* @since 1.5
* @see parse_url()
*/
function _parseURL($uri)
{
$parts = array();
if (version_compare( phpversion(), '4.4' ) < 0)
{
$regex = "<^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?>";
$matches = array();
preg_match($regex, $uri, $matches, PREG_OFFSET_CAPTURE);
$authority = @$matches[4][0];
if (strpos($authority, '@') !== false) {
$authority = explode('@', $authority);
@list($parts['user'], $parts['pass']) = explode(':', $authority[0]);
$authority = $authority[1];
}
if (strpos($authority, ':') !== false) {
$authority = explode(':', $authority);
$parts['host'] = $authority[0];
$parts['port'] = $authority[1];
} else {
$parts['host'] = $authority;
}
$parts['scheme'] = @$matches[2][0];
$parts['path'] = @$matches[5][0];
$parts['query'] = @$matches[7][0];
$parts['fragment'] = @$matches[9][0];
}
else
{
$parts = @parse_url($uri);
}
return $parts;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?