Si vas a copiar

.. y pegar este post en tu web o blog personal, por favor te pido que coloques el link del post de donde lo copiastes:

Fuente:

Saber de donde vienen con php HTTP_REFERER

24 de agosto de 2007 3 comentarios:
PHP tiene la variable global $_SERVER['HTTP_REFERER'] que te retorna un string de la URL que te envio a la pagina actual.

Aqui les presento un script que diseñe para guardar la pagina y otros datos en un archivo .txt

funciones.php

<?php

/*
HECHO POR tttony 2007
http://tttony.blogspot.com/
*/

function referer() {
// IP del cliente
$remote_ip = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : "(Sin IP)";
// ISP del cliente
$remote_isp = gethostbyaddr($remote_ip);
// Aqui la pagina que lo refirio
$referer = (isset($_SERVER['HTTP_REFERER'])) ? strtolower($_SERVER['HTTP_REFERER']) : "error";
// No guardar mis propios referers :)
$my_host = strpos($referer, $_SERVER['HTTP_HOST']);

if (($referer != "error") && ($my_host === false)) {
$file = "referer.txt";
$fo = @fopen($file, "rb");
$content = (is_resource($fo)) ? @fread($fo, filesize($file)) : "";
@fclose($fo);

$exist_ip = strpos($content, $remote_ip);
$exist_ref = strpos($content, $referer);
if (($exist_ip === false) || ($exist_ref === false)) {
$str = time() . " " . $remote_ip . "(" . $remote_isp . ") " . $referer . "\n";
$fo = @fopen($file, "ab");
if (is_resource($fo)) @fwrite($fo, $str);
@fclose($fo);
}
}
}

referer();

?>



Como ven la funcion no retorna ningun valor, en el archivo .txt se guarda:

1. Fecha y hora actual
2. IP del cliente (3. ISP del cliente)
4. El referer

--------

Ahora vamos a leer el archivo .txt y lo presentamos en HTML y bien ordenado.

referer.php


<style type="text/css">
<!--
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
}
body {
margin-left: 10px;
margin-top: 10px;
margin-right: 10px;
margin-bottom: 10px;
}
a:link {
color: #000099;
}
a:visited {
color: #990000;
}
a:hover {
color: #FF0000;
}
-->
</style>
<title>Referer</title>
<?php
// RECUERDA COLOCAR BIEN AQUI LA DIRECCION DEL ARCHIVO
$lineas = @file("referer.txt") or die("No existe el archivo");

echo "<h2>Líneas: ".count($lineas)."</h2>\n";
echo '<table border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#999999">';
echo "<tr bgcolor=#EBEBEB>\n";
echo "<th>Fecha</th>\n";
echo "<th>IP(ISP)</th>\n";
echo "<th>URL</th>\n";
echo "</tr>\n";

$bg_color = "#CCCCCC";
foreach ($lineas as $linea_num => $linea) {
$linea = str_replace("\n", "", $linea);
$arr = explode(" ", $linea);
echo "<tr bgcolor=$bg_color>\n";
echo "<td>".date("d-m-Y, H:i:s", $arr[0])."</td>";
echo "<td>".$arr[1]."</td>";
echo "<td><a target=_blank href=".$arr[2].">".$arr[2]."</a></td>\n";
echo "</tr>\n";
$bg_color = ($bg_color == "#CCCCCC") ? "#EBEBEB" : "#CCCCCC";
}
echo "</table>\n";

?>


Debido a que esto es para que lo lea solo el admin recuerda configurar bien los permisos para que solo tenga acceso el admin.


Publicado en tttony.blogspot.com

Publicar un comentario

3 comentarios:

MADrod dijo...

Muy buen aporte.
Por otro lado, lo mas beneficioso seria guardarlo en una tabla así despues podes trabajar con ellos.
Saludos.

Juani y Mati dijo...

Muy bueno, la verdad es que me sirvio, muchisimo...tengo una pregunta: por ejemplo, lo que me interesa saber es de pagina viene el usuario, NO la url completa.
suponiendo que viene de www.miweb.com/Beta/index.php
con HTTP_REFERR obtengo: www.miweb.com/Beta/index.php
COn PHP_SELF obtengo: /Beta/index.php
Existe una manera de obtener solamente "index.php"???, si existe te agradeceria...hasta ahora uso una funcion asi:
$c= $_SERVER['PHP_SELF'];
$a=explode('/',$c);
$b=count($a);
$dedondeviene=$a[$b-1];
pero espero que haya algo mas simple.
Gracias!!!

monkey dijo...

Muchas gracias por este script

Buscar en el Blog



PUBLICIDAD