
Soms wil je in een eenvoudig PHP script weten wat de huidige URL (de URL via welke het PHP script aangeroepen wordt) is. Toen ik zelf op zoek ging naar een oplossing zonder het wiel opnieuw uit te vinden, vond ik eigenlijk geen enkel stuk PHP code welke voldeed aan mijn verwachtingen. Dus laat ik het ook eens proberen.
Uit welke onderdelen bestaat een URL?
Het formaat van een URL ziet er als volgt uit:
protocol://gebruikersnaam:wachtwoord@host:poort/pad?vraag#fragment
Deze vorm van URL wordt niet alleen voor het World Wide Web gebruikt. Het wordt bijv. ook gebruikt om de benodigde gegevens voor toegang tot een database te communiceren of configureren. Aangezien iedereen bijna dagelijks URL's gebruikt, lijkt het me niet nodig de verschillende onderdelen van de URL verder te omschrijven.
Ik neem aan dat als je in je PHP code de volledige URL wilt gebruiken, je de verificatiegegevens (gebruikersnaam en wachtwoord) niet wilt meenemen om te voorkomen dat deze op een ongewenste manier gebruikt worden. Ook wordt het fragment nooit doorgegeven via de CGI interface dus kun je die ook niet gebruiken.
Welke gegevens staan je ter beschiking in PHP?
Gebruik makend van de functie phpinfo() kun je in PHP bijvoorbeeld zien welke gegevens je ter beschikking staan om de huidige URL te bepalen:
De oplossing?
Hieruit leiden we de volgende code af:
<?php function get_current_url() { $url = false; // check whether this script is being run as a web page if (isset($_SERVER['SERVER_ADDR'])) { $is_https = isset($_SERVER['HTTPS']) && 'on' == $_SERVER['HTTPS']; $protocol = 'http' . ($is_https ? 's' : ''); $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_ADDR']; $port = $_SERVER['SERVER_PORT']; $path_query = $_SERVER['REQUEST_URI']; $url = sprintf('%s://%s%s%s', $protocol, $host, $is_https ? (443 != $port ? ':' . $port : '') : ( 80 != $port ? ':' . $port : ''), $path_query ); } return $url; }
Bonus
Als bonus kun je hier Engelstalige handleidingspagina voor de functie get_current_url() vinden.
En de gist URL is: https://gist.github.com/Magentron/05ee3b8f62886878c2f1c3d76e8e3696
Als je enige verbetering of suggesties wilt doorgeven, laat dan een bericht achter via onderstaande link.