• DE
  • ES
  • EN
  • NL
Google+twitterfacebook

Blog

PHP: Bepaal de volledige URL van de huidige pagina


Geplaatst op maandag 16 oktober 2017 door Jeroen Derks.

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:

Schermafbeelding van phpinfo() uitvoer

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.

Laat me weten of je hier wat aan hebt gehad! (of niet)