Em muitos momentos é necessário obter o endereço completo que o usuário digitou na barra de endereço. Por isso o PHP fornece formas de se obter estes dados. Vamos lá?
O que vamos aprender neste tutorial?
Vamos utilizar a Global $_SERVER e obter duas variáveis que ela disponibiliza, HTTP_HOST e REQUEST_URI em seu array. Por sortes utilizando estes dois valores formam a URL requisitada completa.
O código
<?php $url_completa ="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo $url_completa; ?>
Vamos supor que você esteja acessando o seguinte site (imagem abaixo) e o código acima esteja em execução, qual será a saída do nosso echo?
Bom a saída será:
http://www.kali.org/docs/virtualization/install-hyper-v-guest-enhanced-session-mode/
Se você notou nos usamos duas variáveis disponíveis no array global $_SERVER. O primeiro sendo o http_host e o segundo request_uri, que, como o nome diz, o primeiro é o endereço do domínio(DNS completo incluindo subdomínios) e o segundo o URI (conteúdo após a barra).
Segurança
É importante ficar atento, pois, um invasor pode forjar os dados presentes no http_host, por isto sempre sanitize qualquer dado obtido a partir do navegador e não utilize estes dados como parâmetro de funções vulneráveis como eval().
Melhorando a detecção
Se você notou em nosso código definimos uma string arbitrária definindo a página como ‘http://’. Entretanto, o que acontece se o site possuir HTTPS e você usar nossa função para criar certos links? Provavelmente nada de bom, navegadores modernos bloqueiam conteúdo misto, quando são carregados elementos inseguros (http) em páginas seguras(https).
Para contornar o problema você pode usar uma função como a abaixo. Cortesia do WordPress.
<?php function is_ssl() { if ( isset( $_SERVER['HTTPS'] ) ) { if ( 'on' == strtolower( $_SERVER['HTTPS'] ) ) { return true; } if ( '1' == $_SERVER['HTTPS'] ) { return true; } } elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' == $_SERVER['SERVER_PORT'] ) ) { return true; } return false; } ?>