Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите пожалуйста!!


Автор: chori 1.6.2007, 15:39
Здрасте!!!
Прошу помощи. Есть файл banlist.txt
Сделал форму для записи в него: каждая новая запись на новой строке.
Это вобщем то баня по айпи с админкой.
Но мне нужно сделать еще и скрипт который будет читать этот файл и брать записи в массив.
Тоже сделал, но не работает. Видимо не правильно составляет массив, т.к. когда в файле одна запсь, то все работает.
Помогите плиз. Вот собственно сам код этого скрипта:

Код

<html>
<body>
<?php 
$filename='banlist.txt';
$bp=fopen($filename,'r');
$bannedips=fread($bp,filesize($filename)); 
$banip = $_SERVER['REMOTE_ADDR'];
$bann=array($bannedips);
$countban = count($bann);
for ($i=0; $i<=$countban; $i++) {
if($banip == $bann[$i]) { die("Вы забанены администратором. $banip"); }
}
      
   fclose($bp);

?>

</body>
</html>




В чем ошибка не знаю, но думаю что скрипт не правильно читает массив. Подскажите плиз.
Заранее благодарен.


 ! 
PARROT
Пользуемся кнопкой КОД!

Автор: Golda 1.6.2007, 17:01
Не работает потому, что у Вас нет кода, разделяющего зачитанную единую строку в массив из множества записей. Строка

Код

$bann=array($bannedips);


создает массив из одного элемента - строки, записанной в $bannedips. Сделайте

Код

$bann=explode("\n", $bannedips);


А еще проще, используйте file(), а не fread(). Тогда сразу получите массив

;

Автор: SelenIT 1.6.2007, 17:12
Вдогонку: проверять вхождение элемента в массив лучше не циклом, а специальной ф-цией in_array. Тогда скрипт можно сократить до
Код

<?php
$filename='banlist.txt';
$bann=array_map('rtrim', file($filename));
if (in_array($_SERVER['REMOTE_ADDR'], $bann)) { die("Вы забанены администратором. ".$_SERVER['REMOTE_ADDR']); }
?>

Автор: Another 1.6.2007, 22:03
Ты эт случайно не для setCMS делаешь?

Автор: BuShaRt 2.6.2007, 08:44
SelenIT, 
array_map вы для чего в данном случае использовали? smile

Автор: Golda 2.6.2007, 08:53
file() оставляет в элементах массива символ перевода строки. Чтобы избавиться от него, результат file() с помощью array_map() пропустили через фильтр rtrim() 

Автор: BuShaRt 2.6.2007, 09:00
Golda, 
Спасибо, я видно изначально значение функции в целом неверно понял smile

Автор: chori 4.6.2007, 16:32
Цитата(Another @ 1.6.2007,  22:03)
Ты эт случайно не для setCMS делаешь?

Нет, для другого.

Golda и др.,
Спасибо большое, обьяснили новечку. Все работает.
Вот бы еще научится потом редактировать написанные айпи, тоже через админку.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)