Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: "in_array" - не находит строку
 
 автор: Freddie_X   (26.05.2006 в 23:11)   письмо автору
 
 

Странное дело у меня!
index.php

<?php $ips file("ips.txt"); if(!in_array($_SERVER['REMOTE_ADDR'], $ips)) echo "Не найден!"; else "Найден!"; echo "<br>Ваш IP: ".$_SERVER['REMOTE_ADDR'];

ips.txt

127.0.0.1
62.200.210.156
...

Скрипт у меня выводит:
Не найден!
Ваш IP: 127.0.0.1


Если пробовать любое другое число, то всё находит.

   
 
 автор: Artem S.   (26.05.2006 в 23:18)   письмо автору
 
   для: Freddie_X   (26.05.2006 в 23:11)
 

Учтите, что строка береться с невидимым символом перевода строки "\n".

   
 
 автор: Freddie_X   (26.05.2006 в 23:26)   письмо автору
 
   для: Artem S.   (26.05.2006 в 23:18)
 

Надо заменить "\n" на ""?
Нет, не помогает:
$ip = $_SERVER['REMOTE_ADDR'];
$ip = str_replace("\n","",$ip);

   
 
 автор: ec_stasis   (26.05.2006 в 23:32)   письмо автору
 
   для: Freddie_X   (26.05.2006 в 23:26)
 

нет, проще будет добавить к ИП перевод строки

<?
in_array
($_SERVER['REMOTE_ADDR'].'\n'$ips)

   
 
 автор: Freddie_X   (26.05.2006 в 23:38)   письмо автору
 
   для: ec_stasis   (26.05.2006 в 23:32)
 

Спасибо!

   
 
 автор: Trianon   (26.05.2006 в 23:50)   письмо автору
 
   для: ec_stasis   (26.05.2006 в 23:32)
 

Если '\n' поменять на "\n" (иначе просто ничего не даст), будет хороший способ ловли глюков.
Начиная от того, что под windows вместо "\n" в хвосте строки будет "\r\n",
кончая тем, что последняя строка в файле запросто может никакого довеска не иметь.

<?php
function in_file($needle$fname)
{
   foreach(
file($fname) as $ip)
      if(
trim($ip) == $needle)         return true;
   return 
false;
}

if(
in_file($_SERVER['REMOTE_ADDR'], "ips.txt" ))
    echo 
"Found";
else    echo 
"Not found";
?>

   
 
 автор: ec_stasis   (27.05.2006 в 00:27)   письмо автору
 
   для: Trianon   (26.05.2006 в 23:50)
 

Да, с последним элементом может возникнуть проблема... Хотя, если данные в файл пишет скрипт, то перевод строки там или всегда будет, или всегда не будет...
А про кавычки и апострофы - это для вывода, наверное справедливо только.

   
 
 автор: ec_stasis   (26.05.2006 в 23:45)   письмо автору
 
   для: Freddie_X   (26.05.2006 в 23:26)
 

невидимый перевод строки в эелементах массива $ips

   
 
 автор: Freddie_X   (26.05.2006 в 23:58)   письмо автору
 
   для: ec_stasis   (26.05.2006 в 23:45)
 

ec_stasis
Твой вариант хорошо работает! ;-)
Trianon
Я не люблю цикл foreach, какой-то он непонятный =\

   
 
 автор: cheops   (27.05.2006 в 00:30)   письмо автору
 
   для: Freddie_X   (26.05.2006 в 23:58)
 

>Я не люблю цикл foreach, какой-то он непонятный =\
Он просто предназначен для ассоциативных массивов - в большинстве языков нет встроенных ассоциативных массивов и следовательно нет цикла foreach - вообще это наследие Perl - именно там он впервые появился.

   
 
 автор: ec_stasis   (27.05.2006 в 00:52)   письмо автору
 
   для: Freddie_X   (26.05.2006 в 23:58)
 

очень полезный и удобный цикл! Очень часто просто незаменим. Советую разобраться!

   
 
 автор: Саня   (27.05.2006 в 00:47)   письмо автору
 
   для: Freddie_X   (26.05.2006 в 23:11)
 

<?php
function utrim(&$v$key) { $v trim($v); }
$ips file("ips.txt");
array_walk($ips"utrim");
if(!
in_array($_SERVER['REMOTE_ADDR'], $ips)) echo "Не найден!"; else "Найден!";
echo 
"<br>Ваш IP: ".$_SERVER['REMOTE_ADDR'];
?>

Во всех своих скриптах пользуюсь array_walk().

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования