Last active
December 7, 2017 06:55
-
-
Save anjan011/08df8c9f6b1051b5124e01ca5d131957 to your computer and use it in GitHub Desktop.
Generates an url
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 | |
/** | |
* Generates an url | |
* | |
* @param array $params List of params | |
* | |
* @internal string $params['baseUrl'] The base url, default: $_SERVER['REQUEST_URI'] | |
* @internal array $params['queryAdd'] Adds extra query params as associative array | |
* @internal array $params['queryRemove'] Removes query parameters as simple array | |
* @internal bool $params['forceAbsolute'] Forces the generated url to be an absolute url based on the current domain | |
* | |
* @return null|string | |
*/ | |
public function generateUrl( $params = array() ) { | |
$params = is_array( $params ) ? $params : array(); | |
$forceAbsolute = isset( $params[ 'forceAbsolute' ] ) && $params[ 'forceAbsolute' ]; | |
$baseUrl = isset( $params[ 'baseUrl' ] ) ? trim( $params[ 'baseUrl' ] ) : ''; | |
if ( !$baseUrl ) { | |
$baseUrl = $_SERVER[ 'REQUEST_URI' ]; | |
} | |
$baseUrl = rawurldecode( $baseUrl ); | |
$urlParts = parse_url( $baseUrl ); | |
if ( !$urlParts ) { | |
return NULL; | |
} | |
$scheme = isset( $urlParts[ 'scheme' ] ) ? trim( $urlParts[ 'scheme' ] ) : ''; | |
if ( $forceAbsolute && !$scheme ) { | |
$scheme = 'http'; | |
if ( isset( $_SERVER[ 'HTTPS' ] ) && $_SERVER[ 'HTTPS' ] !== 'off' ) { | |
$scheme .= 's'; | |
} | |
} | |
$host = isset( $urlParts[ 'host' ] ) ? trim( $urlParts[ 'host' ] ) : ''; | |
if ( $forceAbsolute && !$host ) { | |
$host = $_SERVER[ 'SERVER_NAME' ]; | |
} | |
$port = isset( $urlParts[ 'port' ] ) ? trim( $urlParts[ 'port' ] ) : ''; | |
$path = isset( $urlParts[ 'path' ] ) ? trim( $urlParts[ 'path' ] ) : ''; | |
$query = isset( $urlParts[ 'query' ] ) ? trim( $urlParts[ 'query' ] ) : ''; | |
$fragment = isset( $urlParts[ 'fragment' ] ) ? trim( $urlParts[ 'fragment' ] ) : ''; | |
$user = isset( $urlParts[ 'user' ] ) ? trim( $urlParts[ 'user' ] ) : ''; | |
$pass = isset( $urlParts[ 'pass' ] ) ? trim( $urlParts[ 'pass' ] ) : ''; | |
$url = ''; | |
# scheme | |
if ( !$scheme ) { | |
if ( $host ) { | |
$url .= '//'; | |
} | |
} | |
else { | |
$url .= $scheme.'://'; | |
} | |
# host | |
if ( $host ) { | |
# user and pass | |
$auth = ''; | |
if ( $user ) { | |
$auth .= $user; | |
} | |
if ( $pass ) { | |
$auth .= ':'.$pass; | |
} | |
if ( $auth ) { | |
$url .= $auth.'@'; | |
} | |
# the host ... | |
$url .= $host; | |
# port | |
if ( $port ) { | |
$port = (int) $port; | |
if ( $port != 80 && $port != 443 ) { | |
$url .= ':'.$port; | |
} | |
} | |
} | |
# path | |
if ( $path ) { | |
if ( $forceAbsolute ) { | |
if ( stripos( $path, '/' ) !== 0 ) { | |
$path = '/'.$path; | |
} | |
} | |
$url .= $path; | |
} | |
# query | |
$queryArray = array(); | |
if ( $query ) { | |
parse_str( $query, $queryArray ); | |
} | |
$queryAdd = isset( $params[ 'queryAdd' ] ) && is_array( $params[ 'queryAdd' ] ) ? $params[ 'queryAdd' ] : array(); | |
if ( !empty( $queryAdd ) ) { | |
foreach ( $queryAdd as $k => $v ) { | |
$queryArray[ $k ] = $v; | |
} | |
} | |
$queryRemove = isset( $params[ 'queryRemove' ] ) && is_array( $params[ 'queryRemove' ] ) ? $params[ 'queryRemove' ] : array(); | |
if ( !empty( $queryRemove ) ) { | |
foreach ( $queryRemove as $k ) { | |
unset( $queryArray[ $k ] ); | |
} | |
} | |
if ( !empty( $queryArray ) ) { | |
$url .= "?".http_build_query( $queryArray ); | |
} | |
# fragment | |
if ( $fragment ) { | |
$url .= '#'.$fragment; | |
} | |
return $url; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment