• DE
  • ES
  • EN
  • NL
Google+twitterfacebook

Blog

PHP: Determinar la URL completa de la página actual


Publicado el lunes 16 de octubre de 2017 por Jeroen Derks.

A veces quieres saber en un simple script de PHP cuál es la URL actual (la URL a través de la cual se llama el script PHP). Cuando buscaba una solución sin reinventar la rueda, en realidad no encontré ninguna pieza de código PHP que cumpliera mis expectativas. Entonces déjame probarlo también.

¿De qué componentes consiste una URL?

El formato de una URL se ve así:

	protocolo://usuario:contraseña@host:puerto/ruta?pregunta#fragmento

Esta forma de URL se usa no solo para la World Wide Web. Por ejemplo, también se utiliza para comunicar o configurar los datos requeridos para el acceso a una base de datos. Como todos usan URLes casi a diario, no me parece necesario describir más las diferentes partes de la URL.

Supongo que si deseas utilizar la URL completa en su código PHP, no deseas usar la información de verificación (nombre de usuario y contraseña) para evitar que se use de forma no deseada. Además, el fragmento nunca se pasará a través de la Interfaz de Entrada Común para que no puedas usarlo.

¿Qué datos están disponible para ti en PHP

Usando la función phpinfo(), puedes ver, por ejemplo, qué datos están disponibles en PHP para determinar la URL actual:

Captura de la pantalla de salida de phpinfo()

¿La solución?

De lo arriba podemos generar la siguiente función:

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

Como extra puedes encontrar Página de manual en inglés para la función get_current_url() aquí.
Y el enlace de gist es: https://gist.github.com/Magentron/05ee3b8f62886878c2f1c3d76e8e3696

Si tienes alguna mejora o sugerencia para compartir, por favor deja un mensaje a través del siguiente enlace.

Por favor házmelo saber si este articulo ha sido util para ti. (o no)