Avatar billede snoezel Nybegynder
24. januar 2004 - 02:05 Der er 9 kommentarer og
1 løsning

PHP referrer

Hejsa.

Er der nogen der kan gennemskue hvorfor dette script tror alle besøgende er "Noref" - meningen er at det skal kunne genkende hvilket domæne de kom fra:

******************************************************************
<?php
// Cjultra v2.0.3
ignore_user_abort(true);
include("common.php");
$linkid = db_connect();
if (!$linkid) error_message(sql_error());
$day = date("w");
$yday = date("w", time() - 86400);
$hour = date("G");

if (isset($HTTP_X_FORWARDED_FOR)) $REMOTE_ADDR = $HTTP_X_FORWARDED_FOR;
if (isset($HTTP_REFERER)) {
$url = parse_url($HTTP_REFERER);
$from = eregi_replace("www\.", "", $url["host"]);
$from = addslashes($from);
if (!$from) $from = "noref";
}
else $from = "noref";

?>
<script language="JavaScript">
<!--
document.cookie='from=<?php echo $from; ?>; expires=<?php echo date("l, j-M-y G:i:s ", time() + 300); ?>GMT;';
//-->
</script>
<?php

if (empty($from) or blacklisted($from) or blacklisted($_SERVER['REMOTE_ADDR'])) exit;

//if ((isset($from) and blacklisted($from)) or blacklisted($REMOTE_ADDR)) exit;
//if (blacklisted($from) or blacklisted($REMOTE_ADDR)) exit;
dbadd($from);
if (is_raw_hit($_SERVER['REMOTE_ADDR'])) $is_raw = 1;
else $is_raw = 0;
hit_in($from,$is_raw);

$query = "select * from lastupdate";
$result = mysql_query($query);
$data = mysql_fetch_array($result);
if ($hour != $data["i1"]) $hourlyreset = 1;
if (abs(time() - $data["i2"]) > 60) calculate();
//////
/////
function calculate() {
global $dailyreset, $hourlyreset;
$day = date("w");
$min = date("i");
$yday = date("w", time() - 86400);
$hour = date("G");
if ($hour > 0) $yhour = $hour - 1;
else $yhour = 23;
$time = time();
$query = "select * from trade";
$result = mysql_query($query);
while ($data = mysql_fetch_array($result)) {
error_reporting(E_ALL ^ E_NOTICE);
$query2 = "select * from day where z = '" . $data["a1"] . "'";
$result2 = mysql_query($query2);

if (!mysql_num_rows($result2) == 0) {
$data2 = mysql_fetch_array($result2);
for ($i = 0; $i <= $hour; $i++) {
$data["a22"] += $data2["zr$i"];
$data["a23"] += $data2["zu$i"];
$data["a24"] += $data2["zo$i"];
$data["a25"] += $data2["zc$i"];
}
}
else {
$data["a22"] = $data["a23"] = $data["a24"] = $data["a25"] = 0;
}
$data["a26"] = $data2["zr$hour"];
$data["a27"] = $data2["zu$hour"];
$data["a28"] = $data2["zo$hour"];
$data["a29"] = $data2["zc$hour"];


    $d = $data["a1"];
    if ($data["a25"]) $p = 1000 * (($data["a25"] + 1) / ($data["a24"] + 1));
    else $p = 0;
    $p = $p * sqrt(($data["a22"] + 1)/ ($data["a24"] + 1));
    if ($data["a15"] == -1 && $data["a24"] > 10 && (($data["a24"] + 1) / ($data["a22"] + 1) * 100 > $data["a8"])) $p = -1000000;
    if ($data["a16"] == -1) $p = -1000000;
    if (!($data["a9"] == -1 && $hour > 0 && $data2["zr$hour"] + $data2["zr$yhour"] == 0) && $data["a18"] > $data["a28"]) $p += 3000 * (($data["a18"] - $data["a28"]) / ($data["a28"] + 1));
    $p = ceil($p);

    $query3 = "update trade set a19 = '$p' where a1 = '$d'";
    $result3 = mysql_query($query3);
    if(!$result3) error_message(sql_error());
}
$query5 = "update lastupdate set i2 = '$time'";
$result5 = mysql_query($query5);
if(!$result5) error_message(sql_error());
  $query14 = "select a1 from trade";
  $result14 = mysql_query($query14);
  while ($data14 = mysql_fetch_array($result14)) {
      dbadd($data14["a1"]);
}
}
///
if (isset($hourlyreset)) {
if ($hour == 0) {
    $dy = date("Ymd",time() - 6000);
    $dy = $dy . ".txt";
    if (!(file_exists("cjstats/$dy"))){
        $query = "select * from day";
        $result = mysql_query($query);
        $fp = fopen("cjstats/$dy","w");
        while ($data = mysql_fetch_array($result)) {
              $str = $data["z"];
              for ($i = 0; $i <= 23; $i ++) {
                  $str = "$str|" . $data["zr$i"];
              }
              for ($i = 0; $i <= 23; $i ++) {
                  $str = "$str|" . $data["zu$i"];
              }
              for ($i = 0; $i <= 23; $i ++) {
                  $str = "$str|" . $data["zo$i"];
              }
              for ($i = 0; $i <= 23; $i ++) {
                  $str = "$str|" . $data["zc$i"];
              }
              $str = "$str\n";
              fwrite($fp, $str);
        }
        fclose($fp);
    }
}

  $query11 = "update day set zr$hour = '0', zu$hour = '0', zo$hour = '0', zc$hour = '0'";
  $result11 = mysql_query($query11);
  $query12 = "update lastupdate set i1 = '$hour'";
  $result12 = mysql_query($query12);
  if(!$result12) error_message(sql_error());
if ($hour % 6 == 0) {
            $fp = fopen("iplog.txt" , "w");
            fwrite($fp, "0000\n");
            fclose($fp);
}
$query = "delete from day where ";
for ($i = 0; $i < 24; $i++)
{
    $query .= "zr$i = 0 and zu$i = 0 and zo$i = 0 and zc$i = 0";
    if ($i < 23) $query .= " and ";
}
    $result = mysql_query($query);
    if(!$result) error_message(sql_error());
}
///


function is_raw_hit($ip) {
$ip_array = file("iplog.txt");
if (in_array("$ip\n", $ip_array) || !$ip) return true;
else {
    array_push($ip_array, "$ip\n");
    if ($fp = fopen("iplog.txt" , "w")) {
            $ip_array = implode("", $ip_array);
            fwrite($fp, $ip_array);
            fclose($fp);
            }
            return false;
    }
}

function hit_in($from,$is_raw)
{
    global $day,$hour,$is_raw;
    $tm = time();
    if ($is_raw) $query = "update trade set a6 = '$tm', a10 = a10 + 1 where a1 = '$from'";
    else $query = "update trade set a6 = '$tm', a10 = a10 + 1, a11 = a11 + 1 where a1 = '$from'";
    $result = mysql_query($query);
    if (!$result) error_message(sql_error());
    dbadd(!isset($d));
    if ($is_raw) $query = "update day set zr$hour = zr$hour + 1 where z = '$from'";
    else $query = "update day set zr$hour = zr$hour + 1, zu$hour = zu$hour + 1 where z = '$from'";
    $result = mysql_query($query);
    if(!$result) error_message(sql_error());
}

function dbadd($d)
{
    $day = date("w");
    $query = "select z from day where z = '$d'";
    $result = mysql_query($query);
    if(!$result) error_message(sql_error());
    if ((mysql_num_rows($result) == 0) and $d) {
        $query2 = "insert into day values('$d'";
        for ($i = 0; $i < 96; $i++) {
            $query2 = $query2 . ",'0'";
        }
        $query2 = $query2 . ")";
        $result2 = mysql_query($query2);
        if(!$result2) error_message(sql_error());
}
}
function blacklisted($from)
{
    $query = "select * from blacklist where e1 = '$from'";
    $result = mysql_query($query);
    if(!$result) error_message(sql_error());
    return (mysql_num_rows($result) > 0);
}
mysql_close($linkid);
?>
Avatar billede ohmish Nybegynder
24. januar 2004 - 02:10 #1
referrer sættes til "" (ingenting) af de fleste firewalls.
og flere og flere bruger firewalls
+.. er det sansynligt at nogle/mange linker til din side?

prøv med $_SERVER['HTTP_REFERER'] istedet
Avatar billede ohmish Nybegynder
24. januar 2004 - 02:12 #2
man kommer "ingen steder fra" hvis man skriver dit domæne i adresselinien. Det kræver at man har klikket på et link, før du kan se det.

der er vel ingen grund til at bruge parse_url($HTTP_REFERER);
jeg mener.. hvorfor skal den side gæsten kommer fra checkes?
Avatar billede snoezel Nybegynder
24. januar 2004 - 02:15 #3
det er et script der virker på en anden server, men nu ligger det på en windows server og det giver lidt problemer - ja der er sider der linker til min
Avatar billede snoezel Nybegynder
24. januar 2004 - 02:16 #4
er det den første linie, der skal prøve denne : $_SERVER['HTTP_REFERER']  ?
Avatar billede ohmish Nybegynder
24. januar 2004 - 02:45 #5
prøv at udskifte:

if (isset($HTTP_X_FORWARDED_FOR)) $REMOTE_ADDR = $HTTP_X_FORWARDED_FOR;
if (isset($HTTP_REFERER)) {
$url = parse_url($HTTP_REFERER);
$from = eregi_replace("www\.", "", $url["host"]);
$from = addslashes($from);
if (!$from) $from = "noref";
}
else $from = "noref";


med:


if (isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) {
$from = $_SERVER['HTTP_REFERER']; }
else { $from = "noref"; }
Avatar billede snoezel Nybegynder
24. januar 2004 - 11:17 #6
det ser desværre ud til at det er det samme - alle er noref.

Jeg har et par link partnere jeg med sikkerhed ved sender deres refer med, da jeg har dem som partner på en anden side.

det er da totalt underligt det her :-(
Avatar billede snoezel Nybegynder
24. januar 2004 - 11:40 #7
ohmish>> nu ved jeg egentlig godt hvorfor den parser URL - det er fordi en partner bliver oprettet med kun domæne eks: dinurl.dk og ikke http://www - så for at tjekke om de er partnere skal den fjerne eksempelvis /index.htm i deres refer
Avatar billede snoezel Nybegynder
24. januar 2004 - 11:42 #8
den tjekker både RAW hits og UNIKE hits in: derfor den bruger alt dette:

if (isset($HTTP_X_FORWARDED_FOR)) $REMOTE_ADDR = $HTTP_X_FORWARDED_FOR;
if (isset($HTTP_REFERER)) {
$url = parse_url($HTTP_REFERER);
$from = eregi_replace("www\.", "", $url["host"]);
$from = addslashes($from);
if (!$from) $from = "noref";
}
else $from = "noref";

Skal der ændres i ovenstående for at overholde nye standarder, måske det er defor ?
Avatar billede snoezel Nybegynder
25. januar 2004 - 12:32 #9
Jeg tog lidt af dit og satte sammen med mit - så kom det til at virke ohmish :-)
Avatar billede ohmish Nybegynder
25. januar 2004 - 14:10 #10
ski'jgodt så :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester