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 o protocolo (http,https), hostname (www.domínio.com), scriptname (diretório/nome do arquivo) e parâmetros passados 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:

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

Bons estudos!

Tópicos relacionandos

Publicado por

Razor

Conhecedor das artes gráficas, amante de design web, amigo íntimo do desenvolvimento web, com a pretensão de aprender e ajudar à quem busca conhecimento, me faço presente. =)

43 comentários sobre “Como pegar a URL com PHP”

  1. Vamos dar um exemplo, tenho a conexão com a windowslive, e o comando que retorna é #access_token= como faço para pegar o codigo assim #access_token=”CODIGO FICA AQUI”? obrigado.

        1. Caro @Leonardo e @Carlos, já tentaram usar Javascript para pegar o que vem depois do símbolo ‘#’?
          Fiz um teste simples aqui e consegui numa URL deste formato:

          url.com.br/teste.php?pegando=ancora#access_token=1234567

          … pegar apenas #access_token=1234567, o que facilita depois para um simples trato pegar só o que vem depois do sinal de igualdade.

          Enfim… usando esse simples Javascript da pra ter uma ideia:

          O .hash que faz a mágica.

          Desculpe-me por não ter compreendido a dúvida antes.

          1. @Carlos, o problema do modo que mencionei é que não há como atribuir o valor à uma variável.
            Você pode tratar com Javascript e pegar só o valor do ‘acces_token’ e para enviar para outra página poderia usar jQuery/Ajax.
            Na minha limitada experiência, não sei dizer se teria como recuprar esse dado numa variável lá na outra página, mas na lógica, se for enviado via POST ou GET via jQuery/Ajax teria como, mas só testando.
            Recomendo um estudo com atenção aqui: http://api.jquery.com/
            Uma atenção aqui tbm pode ajudar de forma mais específica: Resultado de busca no Google

            Bons estudos

  2. Muito boa a dica.
    No entanto, ocorreu uma dúvida aqui:
    tem como pegar o ScriptName e deixar apenas o diretório?
    No exemplo ele buscou “diretório/nome do arquivo”.
    Como faço para buscar ou exibir apenas o DIRETÓRIO?
    Abraço!

    1. Olá @Luiz.
      Existem diversas formas de fazer a mesma coisa, vai depender da complexibilidade do que está desenvolvendo e da tua necessidade.
      Por hora te indico algumas possibilidades simples e básicas juntamente com os links para consulta caso desejar se aprofundar no estudo.

      dirname()

      Exemplo:

      echo dirname($_SERVER['PHP_SELF']); // ou
      echo dirname($_SERVER['REQUEST_URI']); // ou
      echo dirname($_SERVER['SCRIPT_NAME']);

      // Todos irão retornar /diretório ou diretório1/diretório2 ou assim sucessivamente de acordo com o número de diretórios na URL

      Você pode também dar uma pesquisada sobre pathinfo()

      Bons estudos!

  3. Muito útil parabéns,
    mas gostaria de uma ajuda. No exemplo de pegar somente o diretório ele sempre trás a / (barra) antes do nome do diretório, e se eu quiser somente o nome. Como faço para no php ele eliminar a barra ?
    Desde já muito obrigado pelo artigo. Abraço

  4. Olá Amigo!

    Parabéns pelo artigo!

    Só a seguinte linha que está com um errinho:

    $protocolo = (strpos(strtolower($_SERVER[‘SERVER_PROTOCOL’]), ‘https’) === false) ? ‘http’ : ‘https’;

    O comando $_SERVER[‘SERVER_PROTOCOL’] retorna HTTP/1.1 ou HTTP/1.0 tanto para http quanto para https. só diferencia de outros protocolos.

    Uma forma de saber se é https é usando o seguinte:

    $protocolo = ($_SERVER[‘HTTPS’])? ‘https’ : ‘http’;

    Mais uma vez, mto bom o artigo.
    Parabéns!

  5. Roberto desculpa pela minha ignorância mais a onde se aplica esse código
    onde ele fica armazenado?
    Roberto vi muito sites com os endereços de paginas assim ex. site.com.br/pg=?&121
    como isso funciona, tem algum exemplo.

    Obrigado!

    1. $query = mysql_query("SELECT * FROM tabela WHERE ?? = 110");

      Ali onde coloquei os sinais de “??” você deve colocar o nome do campo que armazena os valores númericos dos posts, acredito que seria o campo que armazena os IDs das postagens.
      Era isso?
      Bons estudos

  6. fiz um GET atraves do index.php?user=maria e baixei os dados numa pagina, pois agora gostaria de passar os dados para outras paginas.

    só que a outra página o link é assim http://www.site.com.br/empresa
    nessa pagina empresa precisa entrar novamente o paramentro user para puxar os dados maria.
    Lembrando que não é preciso logar para os usuarios ver os dados ( não terá pagina de login )

    1. Quando pegou o valor de user=xxx pela primeira vez, pode guardar em uma session e assim poderá acessar essa variável em todas as páginas do teu site até que a session seja finalizada.
      Lembrando que todas as páginas que deseja ter acesso ao valor desta session, deverá conter no topo a declaração da função session_start().
      Bons estudos.

  7. Parabéns e obrigado. Depois de passar mais de 10 horas entre erros, acertos e procura na internet, finalmente alguém sábio e simples na explicação e que vai diretamente ao ponto. Levei apenas três minutos para implementar o código PHP para capturar o parâmetro da URL e localizar um registro no BD. Agradeço a sua ajuda. Pode parecer simples para muitos a solução. Porém, para muitos mais, é chinês, ainda mais para quem está começando e aprendendo na raça. Obrigado mais uma vez e um grande abraço.

  8. Para quem quer buscar o valor da âncora segue um exemplo:

    $url=parse_url(“http://localhost/super/index.php#locacao-espaco-festa”);

    echo $url[“fragment”];

    Esse código irá imprimir apenas o ancora.
    Abraços

  9. Olá pessoal estou usando este link para receber valores de uma página em meu site, no diretório raiz ele funciona perfeitamente, mas quando coloco o arquivo em diretório criado dentro da raiz retorna nada

    $currency = @file_get_contents(‘http://download.finance.yahoo.com/d/quotes.csv?s=’.$coin2.$coin1.’=X&f=sl1d1t1ba&e=.csv’);

    funciona quando o index.php está na raiz

    erro quando coloco o index.php em raiz/teste

    ../ na frente da url e nada

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *