2010-01-15 22 views
5

Así que estoy tratando de obtener la página de donde vino un visitante. Inserté este código en un archivo php y estoy tratando de ver la URL de la página, pero no está funcionando, ¿alguna sugerencia?URL de referencia en php

<?php 

    $ref = getenv("HTTP_REFERER"); 
    echo $ref; 

?> 

(añadido esto después de algunas respuestas) También he intentado

print $_SERVER["HTTP_REFERER"]; 

y que tampoco funciona

funcionó después de que el sitio web actualizado muchas veces, sin saber por qué ¿Hubo un problema en primer lugar, gracias de todos modos :)

+1

¿Qué quiere decir "no funciona"? – Sampson

+0

Quiero decir, no devolvió nada. Traté de repetirlo, no imprime nada, traté de almacenarlo en una variable, la variable tiene "" (nada). – user220755

Respuesta

19

¿Has intentado acceder a través del superglobal $_SERVER?

print $_SERVER["HTTP_REFERER"]; 
+0

tampoco funciona – user220755

+0

¿Aparece un error? – Sampson

+2

Suponiendo que su script es correcto (a diferencia de un error de sintaxis, etc.) ¿Está seguro de que hay una referencia HTTP? Compruebe sus encabezados HTTP, ya que PHP obtiene la referencia desde allí. Si el cliente no envió una referencia, no habrá ninguna. – futureelite7

2

getenv() se utiliza si se está ejecutando como un script CGI. Con un SAPI, usa $_SERVER["HTTP_REFERER"].

4

$ _SERVER ['HTTP_REFERER'] es la mejor manera de acceder a esta información.

Sobre la base de sus comentarios sobre otras respuestas:

  1. ¿En realidad que viene de alguna parte? Si actualiza su navegador, probablemente este valor no se envíe. Por lo tanto, asegúrese de que su navegador esté enviando el encabezado. Si coloca esta secuencia de comandos en una url pública, me complace comprobarlo y verificarlo.
  2. Realmente debería activar todos los errores. Si el encabezado no se envía y usted accede de todos modos, PHP emitirá un E_NOTICE. Si está depurando su código, debe activar todos los mensajes de error y asegurarse de que no haya E_NOTICE o algo peor.
0

Una vez más, leer http://php.net/manual/en/reserved.variables.server.php: Con HTTP_REFERER hay un comentario:

La dirección de la página (si lo hay), que se refiere al agente de usuario a la página actual. Esto es establecido por el agente de usuario. No todos los agentes de usuario configurarán esto, y algunos proporcionan la capacidad de modificar HTTP_REFERER como característica. En resumen, realmente no se puede confiar.

3

Quizás una observación estúpida, pero $_SERVER["HTTP_REFERER"] solo funciona si ingresa a la página mediante un hipervínculo. p.

/goto.html

<a href="refer.php">go to refer</a> 

/refer.php

<?php 
print "You entered using a link on ".$_SERVER["HTTP_REFERER"]; 
?> 

HTTP_REFERER no funciona si se introduce la ubicación del enlace directamente en su navegador.

1

Si calcula todas estas respuestas, se termina con algo parecido a: trabaja

<?php 
if isset($_SERVER['HTTP_REFERER']) { 
    $ref = $_SERVER['HTTP_REFERER']; 
} 
else { 
    $ref = "Direct Entry"; 
} 
?> 
2
<?php 
    echo $_SERVER['HTTP_REFERER']; 
?> 

El código anterior! Sin embargo, a muchos de mis alumnos les resulta difícil, al principio, entender que $_SERVER['HTTP_REFERER']requiere llegando de un enlace.

les doy el siguiente (probado) código (o "página web") de demostrar. El código de arriba está en la parte inferior.

show-referer.php

<?php 
    if (isset($_SERVER['HTTP_REFERER'])) { 
    $referer = $_SERVER['HTTP_REFERER']; 
    } else { 
    $referer = 'No Link - No Referer - Direct URL Entry'; 
    } 
    echo $referer; 
?> 

<p>See the referer in action 
    <a href="show-referer.php">from this page!</a> 
</p> 

<?php 
    echo $_SERVER['HTTP_REFERER']; 
?> 

la página de enlaces de Show-referer.php a sí mismo cuando se hace clic en el enlace, que hace que el navegador para generar una HTTP_REFERER.