Nur gleiche Seiten logen - Aber wie?

RageNo1

Erfahrenes Mitglied
Hallo ich habe hier ein Script, welches nur vorgegebene Referrer logt bzw. soll.
Ich habe also in der config.php unter $oksites die seiten eingetragen welche gelogt werden dürfen.
Das sieht dann wie folgt aus: $oksites = "domain.com|tutorials.de|heise.de";

Nun werden leider nicht nur z.B. tutorials.de gelogt sondern auch supertutorials.de usw.
Das heisst der logt auch Domains, welche den vorgegebenen Namen beinhalten.

Was muss hier umgestellt werden damit die Seiten genau gleich sein müssen um gelogt zu werden? Also sprich nur tutorials.de und nicht mehr supertutorials.de.

PHP:
<?php

if(basename($_SERVER['SCRIPT_NAME'])=='log.php')
{
    exit;
}

require_once('config.php');

if($block_head_put&&($_SERVER['REQUEST_METHOD']=='HEAD'||$_SERVER['REQUEST_METHOD']=='PUT'))
{
    exit;
}

if(!empty($_SERVER['HTTP_REFERER'])&&preg_match("!$oksites!i",$_SERVER['HTTP_REFERER']))
{
    preg_match('!^https?://([a-zA-Z\-_\.0-9]+)!',addslashes(htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES)),$ref);
    $ref=$ref[1];

    if(!empty($ref))
    {
        $parts=explode('.',$ref);
        $size=count($parts);

        if($size==2||$size==3&&$parts[1]=='co'&&strlen($parts[2])==2)
        {
            $ref='www.'.join('.',$parts);    
        }
        elseif($parts[0]!='www'&&$subdomain_sub) // elseif($subdomain_sub)
        {
            preg_match('!\.([a-zA-Z\-_0-9]+\.[a-zA-Z]+(\.[a-zA-Z]{2})?)$!',$ref,$new);
            
            if(substr_count($subdomain_sub,$new[1]))
                $ref='www.'.$new[1];
        }

        $x_ip=addslashes(trim($_SERVER['HTTP_X_FORWARDED_FOR']));
        $c_ip=addslashes(trim($_SERVER['HTTP_CLIENT_IP']));


        if(!is_banned())
        {
            mysql_query("insert into TW_referers (url,hitsout,time,ip,x_ip,c_ip) values ('$ref',0,'".time()."','{$_SERVER['REMOTE_ADDR']}','$x_ip','$c_ip')");
            
        }
    }
}

function is_banned()
{
    global $ref,$ban_time,$x_ip,$c_ip;

    // fix by neonbubble - www.neonbubble.com
    $xip=(empty($x_ip))?'x':$x_ip;
    $cip=(empty($c_ip))?'x':$c_ip;

    $c=mysql_query("select time from TW_referers where (ip='{$_SERVER['REMOTE_ADDR']}' or x_ip='$xip' or c_ip='$cip') and url='$ref' order by id desc limit 1");
    $d=mysql_fetch_object($c); 
    if(is_object($d)) 
    { 
        if($d->time>time()-($ban_time*60)) 
            return true; 
    } 
    return false; 
}
?>

Mfg Ragey
 
Wie sieht das im Script aus wenn ich fragen darf?
Ich würde es ja gerne selbst testen nur fehlen mir das total die Kenntnisse.
 
PHP:
$parsed = parse_url ("http://www.php.net");
print_r ($parsed);
Selber testen ist wohl nicht mehr :rolleyes:
 
In dieser Zeile wird ja $oksites überprüft (hoffe ich).
PHP:
if(!empty($_SERVER['HTTP_REFERER'])&&preg_match("!$oksites!i",$_SERVER['HTTP_REFERER']))

Nur wie soll ich da diesen String einbauen?
PHP:
$parsed = parse_url ("http://www.php.net"); 
print_r ($parsed);
 
Was meinst du mit ändern?

Du musst deinen Quellcode natürlich entsprechend anpassen,
und den Inhalt von $parsed, bzw. den Index an gegebener Stelle einsetzen.

Oder wie missverstehe ich dich
 
Ok ich habe es nun mal so probiert nur damit logt er gar nichts.
Ich habe die Domains einmal mit http://www. einmal mit www. und einmal nur als domain.de angegeben falls er dafür eine ganz genaue URL braucht.

PHP:
$parsed = parse_url($oksites);

if(!empty($_SERVER['HTTP_REFERER'])&&preg_match("!$parsed!i",$_SERVER['HTTP_REFERER']))

Mfg Ragey
 
Zurück