За последние 24 часа нас посетили 32554 программиста и 1755 роботов. Сейчас ищут 894 программиста ...

Как правилней писать код

Тема в разделе "PHP для новичков", создана пользователем noice, 13 сен 2016.

  1. noice

    noice Активный пользователь

    С нами с:
    7 сен 2012
    Сообщения:
    157
    Симпатии:
    0
    задача блокировки по входящему ip. два варианта решения(ip может быть до 50 примерно):

    Так:
    Код (Text):
    1.  
    2. $arrblk[]='193.232.240.17';
    3. $arrblk[]='46.118.119.25';
    4. $arrblk[]='86.110.188.78';
    5. $numblock = count($arrblk);
    6. $perblk=0;
    7.  
    8. for ($chblock=0; $chblock<$numblock; $chblock++)
    9. {
    10.    
    11. if     ($_SERVER['REMOTE_ADDR'] == $arrblk[$perblk])  {
    12.     die('blocked ' . $_SERVER['REMOTE_ADDR']);
    13. }
    14. $perblk++;
    15. }
    или так
    Код (Text):
    1.  
    2.  
    3. if     ($_SERVER['REMOTE_ADDR'] == '193.232.240.17')  {
    4.     die('blocked ' . $_SERVER['REMOTE_ADDR']);
    5. }
    6.  
    7. if     ($_SERVER['REMOTE_ADDR'] == '46.118.119.25')  {
    8.     die('blocked ' . $_SERVER['REMOTE_ADDR']);
    9. }
    10.  
    11. if     ($_SERVER['REMOTE_ADDR'] == '86.110.188.78')  {
    12.     die('blocked ' . $_SERVER['REMOTE_ADDR']);
    13. }
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    не так и не этак...
    PHP:
    1. <?
    2. $arrblk = [];
    3. $arrblk[]='193.232.240.17';
    4. $arrblk[]='46.118.119.25';
    5. $arrblk[]='86.110.188.78';
    6.  
    7. if ( preg_match ( "/{$_SERVER['REMOTE_ADDR']}/i", implode ( ';', $arrblk ) ) )
    8. {
    9.     echo 'blocked ' . $_SERVER['REMOTE_ADDR'];
    10. }
    --- Добавлено ---
    exit;
     
  3. noice

    noice Активный пользователь

    С нами с:
    7 сен 2012
    Сообщения:
    157
    Симпатии:
    0
    Parse error: syntax error, unexpected на этом моменте $arrblk=[]; (вторая строка)
    если строку удалить тоже ошибки есть айпи в списке
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @noice, версия пыха какая?
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    $arrblk = array();
    $arrblk = [];
    --- Добавлено ---
    P.s: Вступай в конфу!
     
  6. noice

    noice Активный пользователь

    С нами с:
    7 сен 2012
    Сообщения:
    157
    Симпатии:
    0
    PHP5.3 это хостинг там не перейти как я помню.
    @MAN_IFE_ST хорошо вступлю в банду
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    сам не люблю [ $time ] лучше array ( $item ) .. на вкус.
     
  8. noice

    noice Активный пользователь

    С нами с:
    7 сен 2012
    Сообщения:
    157
    Симпатии:
    0
    1. $arrblk = array();
    2. $arrblk[]='193.232.240.17';
    3. $arrblk[]='46.118.119.25';
    4. $arrblk[]='86.110.188.78';

    5. if ( preg_match ( "/{$_SERVER['REMOTE_ADDR']}/i", implode ( ';', $arrblk ) ) )
    6. {
    7. echo 'blocked ' . $_SERVER['REMOTE_ADDR'];
    8. }
    exit;

    так окно пустое если айпи нет в списках блока, если в списке то блочит.
    в файле где этот код еще код всякий есть.
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    :eek:
    удали
    exit;
     
  10. noice

    noice Активный пользователь

    С нами с:
    7 сен 2012
    Сообщения:
    157
    Симпатии:
    0
    :D понял, ща все ок
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    in_array, не? Для пущей важности можно все предварительно в число переводить и список заблокированных хранить в отдельном файле, чтобы для его обновления каждый раз в код не лезть.
     
    Fell-x27 нравится это.
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    так не интересно
     
  13. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    PHP:
    1. $arrblk = array(
    2.   '193.232.240.17' => ''
    3. , '46.118.119.25' => ''
    4. , '86.110.188.78' => ''
    5. );
    6.  
    7. isset($arrblk[$_SERVER['REMOTE_ADDR']]) && die('blocked ' . $_SERVER['REMOTE_ADDR']);
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    вот это ты гавнокодец набабахал...:eek:
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Решение через регулярку тоже немного индусское, если честно ;)

    А тут..ну это прокатит, если, например, каждому IP нужно свою мессагу выдавать. Тогда использование IP как ключей оправдано.
    В противном случае это не очень правильно. Выше же было написано про in_array. Почему бы не использовать его?

    PHP:
    1. <?php
    2. $arrblk = [];
    3. $arrblk[]='193.232.240.17';
    4. $arrblk[]='46.118.119.25';
    5. $arrblk[]='86.110.188.78';
    6.  
    7. if (in_array($_SERVER['REMOTE_ADDR'], $arrblk)){
    8.     echo 'blocked ' . $_SERVER['REMOTE_ADDR'];
    9. }
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    Хотелось свалить все на "Это жи Пятница", но увы вчера был вторник.
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ладно, все мы не без греха, что уж там. Более чем уверен, что любой гуру, если залезет в свой же идеальный код годовалой давности, рано или поздно воскликнет "Какой дебил это написал? Ах да...я сам." И это прекрасно. Это значит, что за этот год навыки выросли, знания приумножились, квалификация поднялась. И все это складывается из таких вот мелочей.
     
  18. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    Метасимвол точка совпадает с любым символом, так что содержимое переменной нужно экранировать, перед тем как использовать в регулярке.
    PHP:
    1. $blk ='
    2. 193.232.240.17
    3. 46.118.119.25
    4. 86.110.188.78
    5. ';
    6.  
    7. if ( preg_match ( "/^\Q{$_SERVER['REMOTE_ADDR']}\E$/m", $blk ) )
    8. {
    9.     die( 'blocked ' . $_SERVER['REMOTE_ADDR'] );
    10. }
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Все еще проще - не надо проводить поиск по массиву, через превращение оного в строку с дальнейшим парсингом регуляркой. Это индуизм чистейшей воды.