counter mit ip-sperre

eViLaSh

Erfahrenes Mitglied
also ich hab nen counter gecoded der aber nur die letzte ip sperrt.
ich hab mir überlegt, das er aber alle ip´s sperren soll, aber ich weiss leider nicht wie ich das umsetzen kann..
hier der code :

PHP:
$datum = date("l dS of F Y h:i:s A");



$fp = fopen("ip.log", "r");
while ($zeile = fgets($fp,2000))
    {
    	$ip = explode(",", $zeile);

    }

if($ip[0] != $REMOTE_ADDR)
	{
		$saveip = fopen("ip.log","a");
		$data = "$REMOTE_ADDR, at $datum\n";
		fputs($saveip,$data);
		fclose($saveip);
	}

$array = file("ip.log");
$besucherzahl = count($array);
echo "$besucherzahl";
 
ändere diese zeile:
PHP:
if($ip[0] != $REMOTE_ADDR)
in diese:
PHP:
if(!in_array($REMOTE_ADDR, $ip))

allerdings solltest du die datei nach 24 stunden resetten, da die IPs ja immer neu zugewiesen werden ... ;)
 
seltsammerweisse macht er das trotzdem nicht !?
ich geb mal den log aus:

PHP:
127.0.0.3, at Tuesday 04th of June 2002 12:24:45 PM
127.0.0.1, at Tuesday 04th of June 2002 12:37:56 PM <--die war schon
127.0.0.3, at Tuesday 04th of June 2002 12:38:05 PM
127.0.0.2, at Tuesday 04th of June 2002 12:42:12 PM
127.0.0.5, at Tuesday 04th of June 2002 12:42:24 PM
127.0.0.1, at Tuesday 04th of June 2002 12:42:54 PM <-- die hat er trotzdem noch dazu geschrieben

liegt das vielleicht an der zusätzlichen zeitangabe ? (neien liegts nicht ;))

oder reicht das
PHP:
$ip = explode(",", $zeile);

nicht um das ganze als array zu verpacken ?
 
Zuletzt bearbeitet:
hm nee mit der zeit sollte es trotzdem klappen. ich seh aber grad nen fehler ... ändere den while block mal so um:
PHP:
$fp = fopen("ip.log", "r");
while ($zeile = fgets($fp,2000))
    {
        $ip[] = explode(",", $zeile);

    }
 
ah shit in_array() kann keine mehrdimensionalen arrays durchsuchen ... dann nimm diese funktion und klatsch sie ganz oben in dein script:
PHP:
function in_multi_array($needle, $haystack)
{
	$in_multi_array = false;
	if(in_array($needle, $haystack))
	{
		$in_multi_array = true;
	}
	else
	{	
		for($i = 0; $i < sizeof($haystack); $i++)
		{
			if(is_array($haystack[$i]))
			{
				if(in_multi_array($needle, $haystack[$i]))
				{
					$in_multi_array = true;
					break;
				}
			}
		}
	}
	return $in_multi_array;
}
Quelle: http://www.php.net :)


und ändere die zeile
PHP:
if(!in_array($REMOTE_ADDR, $ip))
in:
PHP:
if(!in_multi_array($REMOTE_ADDR, $ip))

mal sehen, ob das hinhaut =)
 
sry aber das klappt immernochnicht :(

ich glaub das hat was mit dem
PHP:
while ($zeile = fgets($fp,2000))

    {

        $ip = explode(",", $zeile);



    }

zu tun hat

da er auch immer nach dem , am ende der ip sucht, is da kein komma setzt er wieder eine neue ip ran...seltsam seltsam
 
ja - damit das ganze funktioniert musst du die zeile ja auch in diese ändern:
PHP:
$ip[] = explode(",", $zeile);
die beiden eckigen klammern sind sehr wichtig!!!^^
moment - ich bastel dir das script mal eben komplett zusammen, wie es eigentlich klappen sollte:
PHP:
function in_multi_array($needle, $haystack)
{
    $in_multi_array = false;
    if(in_array($needle, $haystack))
    {
        $in_multi_array = true;
    }
    else
    {    
        for($i = 0; $i < sizeof($haystack); $i++)
        {
            if(is_array($haystack[$i]))
            {
                if(in_multi_array($needle, $haystack[$i]))
                {
                    $in_multi_array = true;
                    break;
                }
            }
        }
    }
    return $in_multi_array;
}

$datum = date("l dS of F Y h:i:s A");



$fp = fopen("ip.log", "r");
while ($zeile = fgets($fp,2000))
    {
        $ip[] = explode(",", $zeile);

    }

if(!in_multi_array($REMOTE_ADDR, $ip))
    {
        $saveip = fopen("ip.log","a");
        $data = "$REMOTE_ADDR, at $datum\n";
        fputs($saveip,$data);
        fclose($saveip);
    }

$array = file("ip.log");
$besucherzahl = count($array);
echo "$besucherzahl";

versuchs mal damit :)
ich teste es auch mal eben bei mir!
 
nichts zu danken ;)
aber du musst auf jeden fall noch irgendwie eine resetfunktion einbauen - wie schon erwähnt. nämlich, dass die ip.log nach 24 stunden (oder an einem bestimmten zeitpunkt) geleert wird. ist etwas schwierig zu managen hmm ich meld mich, wenn ich ne idee hab ;D
 
Zurück