PHP – Como obter a URL atual

Na sua aplicação PHP pode acontecer de você precisar obter 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 o protocolo (http,https), hostname (www.domínio.com), scriptname (diretório/nome do arquivo) e parâmetros passados na URL.

Este post de Roberto Lunelli, publicado no site www.sistemabasico.com.br, mostra como o array $_SERVER funciona e algumas das possibilidades de utilização.

Primeiramente vamos fazer nossos testes/estudos em cima de uma estrutura complexa de URL como esta abaixo:

http://www.dominio.com/teste/meuscript.php?estado=SC&=cidade=Florianopolis

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’].

<?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:

<?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:

<?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:

<?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:

<?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:

<?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:

<?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

Fonte: www.sistemabasico.com.br/2011/03/16/como-pegar-a-url-com-php