Como pegar a URL com PHP

Na sua aplicação PHP pode acontecer de você precisar saber a URL atual ( a URL na barra de endereço do navegador).
No PHP existem algumas variáveis ​​globais  que permitem obter a URL atual através de um processo bem  simples. Você pode obter todas informações sobre a URL atual por partes, usando o array $_SERVER. Você pode pegar oprotocolo (http,https), hostname (www.domínio.com), scriptname (diretório/nome do arquivo) e parâmetrospassados na URL.
Após essa pequena introdução, vamos ver como isso funciona.
Primeiramente vamos fazer nossos testes/estudos em cima de uma estrutura complexa de URL como esta abaixo:

Vamos pegar essa URL e dividir em pedaços:
http – Este é o protocolo
www.dominio.com – Este é hostname
teste – Este é o diretório
meuscript.php – Este é o nome do arquivo que contém o script PHP
estado – Este é o primeiro parâmetro e seu valor é ‘SC’
cidade – Este é o segundo parâmetro e seu valor é ‘Florianopolis’
Agora vamos tentar construir a mesma URL, mas com PHP.
Pegando o Protocolo – http
O protocolo da URL pode ser lido através da variável $_server[‘SERVER_PROTOCOL’].

1
2
3
4
5
<?php
echo $_SERVER['SERVER_PROTOCOL'];
?>

No entanto se você for verificar, verá que não obterá simplesmente http ou https, mas sim uma sequência como esta:HTTP/1.1.
Então iremos precisar de alguma forma manipular a string para obter o protocolo limpo, ou seja, http ou https apenas:

1
2
3
4
5
6
7
<?php
$protocolo = (strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'https') === false) ? 'http' : 'https';
echo $protocolo;
?>

Pegando o Hostname – www.dominio.com
 
Como próximo passo nós iremos descobrir o hostname. Faremos isto com a variável $_SERVER[‘HTTP_HOST’] da seguinte e simples forma:

1
2
3
4
5
6
7
<?php
$host = $_SERVER['HTTP_HOST'];
echo $host;
?>

Pegando o scriptname (diretório/nome do arquivo) – teste/meuscript.php
A variável $_SERVER[‘SCRIPT_NAME’] contém o caminho completo com o nome do atual diretório e arquivo PHP:

1
2
3
4
5
6
7
<?php
$script = $_SERVER['SCRIPT_NAME'];
echo $script;
?>

Pegando os parâmetros da URL – estado=SC&cidade=Florianopolis
 
A última parte da URL pegaremos com a variável $_SERVER[‘QUERY_STRING’] e podemos fazer de forma similar ao que já estamos fazendo com as outras partes:

1
2
3
4
5
6
7
<?php
$parametros = $_SERVER['QUERY_STRING'];
echo $parametros;
?>

Pegando a atual URI (Uniform Resource Identifier) – /teste/meuscript.php?estado=SC&cidade=Florianopolis
 
Se o protocolo e o hostname não são importantes para você e você apenas quer o scriptname (caminho para o script PHP) e os parâmetros, então você pode simplesmente utilizar a variável $_SERVER[‘REQUEST_URI’] da seguinte forma:

1
2
3
4
5
6
7
<?php
$uri = $_SERVER['REQUEST_URI'];
echo $uri;
?>

De acordo com tudo que vimos, para pegar a atual URL da página podemos fazer algo como:
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$protocolo    = (strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === false) ? 'http' : 'https';
$host         = $_SERVER['HTTP_HOST'];
$script       = $_SERVER['SCRIPT_NAME'];
$parametros   = $_SERVER['QUERY_STRING'];
$UrlAtual     = $protocolo . '://' . $host . $script . '?' . $parametros;
echo $UrlAtual;
?>

Nota: Quase todos os servidores modernos que suportam PHP utilizam as variáveis ​​$_SERVER, mas você precisa saber que: “As entradas neste array são criadas pelo servidor web e não há garantia que cada servidor web proverá todas as entradas deste array”.
Veja no manual mais informações sobre a variável $_SERVER
Bons estudos!