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:
¿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.