PDA

Просмотр полной версии : Проверка файла (php)


P3L3NG
17.07.2008, 12:26
Есть сайт, есть файл с IP посетителей, которым "разрешен" просмотр. Вот скрипт,блокирующий или пропускающий юзера:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$fp = fopen(ipsbase.txt', 'r');
$buffer = fgets($fp);
if (strpos($buffer,$ip) !== true) echo $buffer; //просто проверка. потом сотру

if(strpos($ip, "ipsbase.txt") === false) echo "НЕТ ТВОЕГО IP";
?>

Что-то он у меня либо всегда пропускает, либо всегда блокирует.
Как исправить?
Содержание ipbase.txt
127.0.0.1 localhost
214.73.57.1 First

FIND_ERROR
17.07.2008, 12:31
хм... а может лучше зделать с помошью .htaccess ?

Chaak
17.07.2008, 12:34
Можно проще:

<?php
$ip = $_SERVER["REMOTE_ADDR"];
$ips = file_get_contents("ips.txt");
if(strpos($ips,$ip)) echo "Доступ разрешен";
else die("Acces denied");
?>

________________________________
ПРЕВЕД ВЕБКИЛЛУ! :rolleyes: :rolleyes: :rolleyes:

P3L3NG
17.07.2008, 12:34
спс. ща попробую

Что-то не работает, опять все время блокирует, независимо есть там IP или нет

P3L3NG
17.07.2008, 12:48
попробуй посмотри, что выводит:
echo $_SERVER["REMOTE_ADDR"];
Была у меня такая проблема на аёле, когда она все Ip считала за 127.0.0.1
Ip выводит 127.0.0.1
Все по идее должно работать, но уже вторую ночь с этим тра*аюсь и все никак=)

P3L3NG
17.07.2008, 13:04
йа щас хостер =) я на localhost-е балуюсь...
мне надо, чтоб если в файле был 127.0.0.1, то скрипт мну пропускал, если б не был, то слал нафиг)

Neo.aka.Darkman
17.07.2008, 13:37
P3L3NG проверь правильность имен файлов!
А то не пойму то ли ipbase.txt, то ли ipsbase.txt.

P3L3NG
17.07.2008, 13:38
сча. может йа и прадо коряффко=)

зы нет, все верно... :(

system_32
17.07.2008, 13:39
создаем фаил .htaccess

# -FrontPage-

Options None

<Limit GET POST PUT DELETE>
deny from all
allow from ИП кого нада пускать
</Limit>

P3L3NG
17.07.2008, 13:46
рабтает) спс. жаль конечно что не скриптом...
И еще вопрос:

# -FrontPage-

Options None

<Limit GET POST PUT DELETE>
deny from all
allow from <много ip>
</Limit>

как их писать? черз запятую, ; или еще как?

может и на PHP поможете дореализовать?

P3L3NG
17.07.2008, 13:56
Через строчки

# -FrontPage-

Options None

<Limit GET POST PUT DELETE>
deny from all
allow from 127.0.0.1
111.111.111.111
333.33.3.333
</Limit>
так?

system_32
17.07.2008, 13:59
# -FrontPage-

Options None

<Limit GET POST PUT DELETE>
deny from all
allow from 127.0.0.1
111.111.111.111
333.33.3.333
</Limit>
так?

Options None

<Limit GET POST PUT DELETE>
deny from all
allow from 127.0.0.1
allow from 111.111.111.111
allow from 333.33.3.333
</Limit>[/CODE]

так

P3L3NG
17.07.2008, 14:01
все.всем спасибо, особенно System_32 & ChaaK.

Developer
17.07.2008, 14:38
ChaaK, ну ты простой парень :DDD

if(strpos($ips,$ip)) - нельзя так писать... Нужно if(strpos($ips,$ip) === true), ибо strpos возращает позицию первого вхождения, влючая 0. Тобишь первый IP в списке будет слаться нах, если написать как ты, хотя он и разрешен :)

k1b0rg
17.07.2008, 15:27
if(strpos($ips,$ip) === true)

оно никогда не вернет true

-=Static=-
17.07.2008, 15:59
ChaaK, ну ты простой парень :DDD

if(strpos($ips,$ip)) - нельзя так писать... Нужно if(strpos($ips,$ip) === true), ибо strpos возращает позицию первого вхождения, влючая 0. Тобишь первый IP в списке будет слаться нах, если написать как ты, хотя он и разрешен :)


Вообще пишут обычно:


if(strpos($ips,$ip) !== FALSE)
{
// code
}

Buffalon
17.07.2008, 17:05
В твоём коде помойму считывается одна строка/

P3L3NG
21.07.2008, 15:00
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$ips = file_get_contents("ips.txt");
if(strpos($ips,$ip) !== FALSE) echo "";
else die("<html><head><title>IP Filter</title><br><br><br><center><b>Твоего ip
нет в списке
пользователей</b>");
?>

реализовал все таки на пхп...

P3L3NG
26.07.2008, 17:58
А теперь еще вопросик =)
Вот получили мы ip из перменной
$ip = $_SERVER['REMOTE_ADDR'];
допустим 127.0.0.1

а как получить из него в новую переменную первые три группы? то есть, чтоб стало 127.0.0

зы нужно т.к ип щас у большинства динамический и указывать в базу 255-510 адресов это ужоснах

NOmeR1
26.07.2008, 18:22
preg_replace('~(\d+\.\d+\.\d+)\.\d+~', '$1', $ip)
или

substr($ip, 0, strrpos($ip, '.'))