скрипт за бан

systems

Registered
Добър вечер опитвам да си направя прост скрипт които да банва
или още казано да блокира достъпа до дадена страница опитвам се да го направя да чете ип адреса на потребителя от текстови фаил но не се получава.

ето го моя вариянт.

PHP:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
                                   
$filename = 'ban.conf';
if($ip == $filename) {

echo "<div class='error'>banned!!!</div>";

exit;

}
?>


а ето така работи:

PHP:
<?php

$ip = $_SERVER['REMOTE_ADDR'];

$baned = "127.0.1";
if($ip == $baned) {

echo "<div class='error'>Съжалявам гост достъпа до тази система ви е забранен!!!</div>";

exit;

}
                   
?>

а в текстовия фаил инфото е записано по следния начин:

пример:

127.0.1 -когато забраната е постоянна.
127.0.1 1423074991 когато забраната има някакво време.

та идеята ми е скрипта да чете ип адреса от текстовия фаил, но не ми се
получава, ако можете малко да помогнете ще съм много благодарен!!!
 
PHP:
<?php
$file = fopen("file.txt", "r");           //Отваряме файла
$ip = $_SERVER['REMOTE_ADDR'];            //Вземаме IP-то на посетителя

try {
    while (!feof($file)) {   //Цикъл, който се върти докато не стигне края на файла
        $line = fgets($file);             //Разделяме файла на редове
        $split = explode(" ", $line);     //Разделяме реда на части за случаите на забрана с време
        $bannedIp = $split[0];            //IP-то с бан
        if ($ip == $bannedIp) {
            throw new OutOfBoundsException("Your IP address ( $ip ) is banned.");
        }
    }
    echo "Your IP address ( $ip ) is not banned.";
}
catch (Exception $e) {
    echo $e->getMessage();
}
?>

А няма ли да ти е по-удобно с база данни?
 
По-простичко:

PHP:
<?php
   $ip = $_SERVER['REMOTE_ADDR'];
   $bans = file('ban.conf', FILE_SKIP_EMPTY_LINES);

   if ( in_array($ip, $bans) ) {
      echo "<div class='error'>banned!!!</div>";
      die();
   }
?>

И един съвет - ако искате да се занимавате в тази насока, вземете да прочетете някоя книжка с базовия синтактис и структура на PHP. Какво е IP, променлива, ресурс, как се работи с файлове - това са основни неща, без които няма смисъл да се мъчите да постигнете някакви резултати. Език не се учи за няколко дена и определено идеята да се учи синтактиса чрез фрагменти код е много лоша.
 
Благодаря но първия скрипт ми показва;
is not banned без значение дали баннатия ип е в тхт файла или не.
а втория ми показва бял екран независимо дали ип адреса се намира
в тхт файла или не.
 
Проблема не е в скрипта. За да видим какво става, разширявам го до тази версия:

PHP:
<?php
	$ip = $_SERVER['REMOTE_ADDR'];
	$bans = file('ban.conf', FILE_SKIP_EMPTY_LINES);
	echo $ip;
	if ( in_array($ip, $bans) ) {
		echo "<div class='error'>Your IP: {$ip} is banned!!!</div>";
		die();
	} else {
		echo "<div class='error'>welcome!!!</div>";
	}
?>

Едиствените нови неща са показване на IP-то и покзване на съобщение ако IP-то НЕ е намерено в списъка (да не показва бял екран).

Сложих в ban.conf реда 127.0.0.1 (localhost) и резултата не беше това, което си мислех - оказа се, че приоритетно ми прехваща лупбека през IPv6 - ::1.
Вкарах нов ред под 127.0.0.1 - ::1 и след стартиране на скрипта излезе вече това, което очаквах:

Код:
::1
Your IP: ::1 is banned!!!
 
Сега ми показва това:
192.168.0.1
welcome!!!
независимо дали се намира ип адреса в конфа или не.
 
Кода на @lamerko работи, но не взема в предвид банове с време, виж при тестването дали имаш или не...
 
PHP:
<?php
        $ip = $_SERVER['REMOTE_ADDR'];
        $bans = file('bans.txt', FILE_SKIP_EMPTY_LINES);
        //echo $ip;
        $ban = 0;
        foreach($bans as $key => $value) {
            $tmparr = explode(" ", $value);
            if($ip == $tmparr[0]) {
                $ban = 1;
                $time = (($tmparr[1] == NULL) ? "permanent" : $tmparr[1]);
            }  
        }
        
        if($ban)
            echo $time;
        else
            echo "welcome";
?>
Виж го. Но нарпави така, че този тъп файл да изчезне и всичко това да си го четеш и пишеш в .htaccess. Да се ползва
Код:
deny from xxx.xxx.xxx.xxx
И във файла да има само кога да се трие и да се отблокира съответното IP. Че тази система нещо ми е много неприятна като идея.

Поздрави!
 

Back
Горе