39

I want to get a URL and its parameters. Example:

www.someweb.com/somepage.php?id=10

How to get only somepage.php?id=10?

I'm already tried REQUEST_URI and PHP_SELF but it only gives me www.someweb.com/somepage.php or somepage.php. What I want to is just the page name and its parameter(s).

FOX 9000
  • 123
  • 1
  • 1
  • 6
Cross Vander
  • 2,077
  • 2
  • 19
  • 33

6 Answers6

77
basename($_SERVER['REQUEST_URI']);

This will return all URLs with page name. (e.g.: index.php?id=1&name=rr&class=10).

Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
Cross Vander
  • 2,077
  • 2
  • 19
  • 33
  • 4
    This works in your case, but if the url path was 'deeper' ( www.someweb.com/somewhere/somepage.php?id=10 for example ), it would still only return the last part: 'somepage.php?id=10' – Jon Hulka Nov 17 '12 at 03:34
  • Your code return last part only `example.com/page/article` and return `article`, how to make so it should return `page/article` – Rajeev Ranjan Sharma Dec 27 '21 at 07:54
  • @RajeevRanjanSharma maybe you could use `REQUEST_URI` and `implode` by `/` and return 2 last array? – Cross Vander Mar 21 '22 at 16:02
29

for complette URL with protocol, servername and parameters:

 $base_url = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on' ? 'https' : 'http' ) . '://' .  $_SERVER['HTTP_HOST'];
 $url = $base_url . $_SERVER["REQUEST_URI"];
miralong
  • 789
  • 8
  • 11
8

$_SERVER['PHP_SELF'] for the page name and $_GET['id'] for a specific parameter.

try print_r($_GET); to print out all the parameters.

for your request echo $_SERVER['PHP_SELF']."?id=".$_GET['id'];

return all the parameters echo $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];

Mohd Moe
  • 577
  • 3
  • 9
  • there's no way without use $_GET[id]? Because sometimes I use 2 or 3 parameters too. (I just think to make it simpler than $_GET, but if it only the way to make what I want, it's okay) – Cross Vander Nov 17 '12 at 02:55
  • if you are using more than one paramater, then use create array like, id,id2,id3 and use while loop.. – samayo Nov 17 '12 at 02:58
  • There is a way, use `$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']` – Mohd Moe Nov 17 '12 at 03:00
2
function curPageName() {
 return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
}
echo "The current page is ".curPageName()."?".$_SERVER['QUERY_STRING'];

This will get you page name , it will get the string after the last slash

Leon Armstrong
  • 1,285
  • 3
  • 16
  • 41
0

Here's probably what you are looking for: php-get-url-query-string. You can combine it with other suggested $_SERVER parameters.

Community
  • 1
  • 1
Kosta
  • 1,817
  • 1
  • 16
  • 21
0

Here's a very thorough function I use to get the full URL:

function get_full_url( bool $include_query = true ) {
    $protocol = ( ! empty( $_SERVER['HTTPS'] ) && strtolower( $_SERVER['HTTPS'] ) !== 'off' )
        || ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) === 'https' )
        || ( ! empty( $_SERVER['HTTP_FRONT_END_HTTPS'] ) && strtolower( $_SERVER['HTTP_FRONT_END_HTTPS'] ) !== 'off' )
        || ( isset( $_SERVER['SERVER_PORT'] ) && intval( $_SERVER['SERVER_PORT'] ) === 443 ) ? 'https' : 'http';
    $uri = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    return $include_query ? $uri : str_replace( '?' . $_SERVER['QUERY_STRING'], '', $uri );
}
Gavin
  • 7,544
  • 4
  • 52
  • 72