page - Obtener la URL completa de la página actual(PHP)
php url (5)
Esta pregunta ya tiene una respuesta aquí:
- PHP - Obteniendo URL actual 3 respuestas
Estoy trabajando en esta página: http://localhost/projectname/custom.php
Ambos <?php echo $_SERVER[''REQUEST_URI'']; ?>
<?php echo $_SERVER[''REQUEST_URI'']; ?>
y <?php echo $PHP_SELF; ?>
<?php echo $PHP_SELF; ?>
no dar la ubicación completa. ¿Qué debería usar para tomar la ubicación completa de la url?
mira esto ... un poco largo y sucio pero funciona bien ...
function absolutizeUrl ( $u, $p )
{
$url = parse_url( $u );
$page = parse_url( $p );
if ( strpos( $u , ''/'' ) === 0 )
{
//already absolute
} else {
$basePath = '''';
if (
isset( $page[ ''path'' ] )
&& strpos( ltrim( $page[ ''path'' ], ''/'' ), ''/'' )
)
{
$baseTokens = explode( ''/'', $page[ ''path'' ] );
array_pop( $baseTokens ); // strip basename
$baseTokens[] = $u;
$u = join( ''/'', $baseTokens );
}
}
if ( ! isset( $url[ ''host'' ]))
{
$u = ''http://''.$page[ ''host'' ].''/''.ltrim( $u, ''/'' );
}
return $u;
}
function selfURL()
{
$s = empty($_SERVER["HTTPS"]) ? '''' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $protocol."://".$_SERVER[''SERVER_NAME''].$port.$_SERVER[''REQUEST_URI''];
}
function strleft($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); }
Si está tratando de agregar variables de nuevo al final de una URL que está pasando a través de una secuencia de comandos de seguimiento de enlace, por ejemplo, puede intentar esto:
$URI = array();
foreach($_GET as $key=>$val)
{
if ($key!="link"&&$key!="id"&&$key!="type") $URI[] = "$key=".urlencode($val);
}
if (sizeof($URI)>0) $link.="&".join("&",$URI);
En este caso, "link", "id" y "type" eran las variables que necesitaba para el seguimiento, pero la URL que quería rastrear tenía una variable al final que el script me quitaba como si fuera parte de la consulta que se le envía; Necesitaba agregarlo a la URL del enlace antes de pasarlo a la cabecera ("Ubicación:". $ Link).
Si esto es lo que intentas lograr, funciona muy bien y es más corto que el ejemplo anterior.
Encontré este código muy útil
$protocol = strpos(strtolower($_SERVER[''SERVER_PROTOCOL'']),''https'') ===
FALSE ? ''http'' : ''https''; // Get protocol HTTP/HTTPS
$host = $_SERVER[''HTTP_HOST'']; // Get www.domain.com
$script = $_SERVER[''SCRIPT_NAME'']; // Get folder/file.php
$params = $_SERVER[''QUERY_STRING''];// Get Parameters occupation=odesk&name=ashik
$currentUrl = $protocol . ''://'' . $host . $script . ''?'' . $params; // Adding all
echo $currentUrl;
No hay un método nativo hasta donde yo sé, pero podrías usar esto:
function curPageURL() {
$pageURL = ''http'';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}