[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Хэккэр че ты мелишь, хакзоны перечитал?
     
  2. Кишин

    Кишин New Member

    Joined:
    5 Jul 2011
    Messages:
    42
    Likes Received:
    0
    Reputations:
    0
    Нефурычит простой скрипт, помогите.

    Здраствуйте уважаемые знатоки.
    Как то нарыл в рунете скрипт бана по ip
    Вот он:
    PHP:
    <?php  $ip $_SERVER['REMOTE_ADDR']; 
     
    $fo=fopen($file,"r");  
     
    $file=("ban.txt");//отсюда берём ip которые баним  
     
    $ban file("ban.txt");  
     
    $count count($ban);  
     for (
    $i=0$i<$count$i++) {  
     if(
    $ip == $ban[$i]) { die("Доступ запрещён!"); } 
     }  
    ?>
    Обратите внимание, в "ban.txt", туда нужно записывать ip , каждый с новой строки и все они должны банится..
    Дак вот дело в том что скрипт этот не банит если записать более одного ip в ban.txt o_O. Он неработает. Если один ip записан, работает, если более - неработает. Мне нужен именно этот скрипт так как мне нужно чтобы все ip хранились только в файле.
    Есть конечно много скриптов бана, но там ip прописываются в самом скрпте, а не в отдельном файле =( Неподходит, нжен этот.
    Помогите разобратся. :) Почему перестает работать если в ban.txt вписать более одного айпишника.
    Может изменить его как то?
    Заранее благодарю.
     
  3. MaXSS

    MaXSS New Member

    Joined:
    18 Oct 2011
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    как-то так:
    PHP:
    <?php
    $ip 
    $_SERVER['REMOTE_ADDR'];  
    $ban file("ban.txt");  
    foreach(
    $ban as $nax){ 
    if(
    $ip $nax){  
    die(
    "Доступ запрещён!"); 
      }
     } 
    ?>
     
    #20043 MaXSS, 17 Feb 2012
    Last edited: 17 Feb 2012
  4. Кишин

    Кишин New Member

    Joined:
    5 Jul 2011
    Messages:
    42
    Likes Received:
    0
    Reputations:
    0
    Угу спасибо, щас посмотрю :)
     
  5. Кишин

    Кишин New Member

    Joined:
    5 Jul 2011
    Messages:
    42
    Likes Received:
    0
    Reputations:
    0
    MaXSS
    Не не работает. Банит всех подряд. Даже если не прописан твой ip в ban.txt :( :(
    .
    .
    .
    .Ладно я спать уже пойду
     
  6. MaXSS

    MaXSS New Member

    Joined:
    18 Oct 2011
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    Тогда так:
    PHP:
    <?php
    $ip 
    $_SERVER['REMOTE_ADDR'];   
    $ban file_get_contents("ban.txt");
    if(
    preg_match("/$ip/",$ban)){
    die(
    "Доступ запрещён!"); 
    }
    ?>
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Кишин
    PHP:
    <?php  $ip $_SERVER['REMOTE_ADDR']; 
     
    $fo=fopen($file,"r");  
     
    $file=("ban.txt");//отсюда берём ip которые баним  
     
    $ban file("ban.txt");  
     
    $count count($ban);  
     for (
    $i=0$i<$count$i++) {  
     if(
    $ip == trim($ban[$i])) { die("Доступ запрещён!"); } 
     }  
    ?> 
    MaXSS у вас в скриптах несколько ошибок превращающих код в бомбу. В #20216 - идет присвоение значения внутри проверки if:
    PHP:
    if($ip $nax){   
    Следовательно эта проверка всегда (почти) будет возвращать true.

    В #20219 вы необдуманно используете регулярные выражения, которые могут срабатывать (в данном виде) на совершенно произвольные ip адреса, что доставит много приятных минут при отладке
     
    _________________________
  8. ocheretko

    ocheretko Banned

    Joined:
    15 May 2010
    Messages:
    144
    Likes Received:
    51
    Reputations:
    116
    Если есть возможность - храните список ip в массиве прямо в скрипте, секономите на скорости файловой системы.
    Также, чтобы отказаться от регулярки, в случае с массивом можно использовать такую конструкцию: if (in_array($array, $value)) { }

    Чтобы работало еще быстрее, можно банить с помощью htaccess по ip. Его можно элементарно формировать налету (править скриптом) - не придется использовать вообще никаких конструкций поиска

    Редактировано: Только что почитал, что обязательное условие - хранить список только в файле. Тогда, можно сделать еще так: подключить пхп файл, который будет содержать только список айпи, например:
    ip_arr.php
    $ip_array = Array(
    "192.168.1.0",
    "192.168.1.0",
    "192.168.1.0",
    );

    в основном скрипте include 'ip_arr.php';

    либо так: сформировать тхт файл, который обрабатывать:
    $c = file_get_contents("ip.txt")
    $cc = explode("\n",$c)
    foreach ($cc as $b) {
    if (in_array($array, $b)) { // функция бана
    }
    }

    П.С. Да вариантов миллион. Зависит от количества строк в ip.txt (100, 1к, 100к), от этого и нужно отталкиваться, чтобы написать самый оптимальный код под эту боевую задачу
     
    #20048 ocheretko, 17 Feb 2012
    Last edited: 17 Feb 2012
  9. Кишин

    Кишин New Member

    Joined:
    5 Jul 2011
    Messages:
    42
    Likes Received:
    0
    Reputations:
    0
    Gifts
    Спасибо, щас посмотрю.

    ocheretko
    Нет в самом скрипте в массиве это неудобно, это придется мутузить скрипт всевремя и записывать в него новый ip. Ведь забаненный айпишник проше записать в файл, чем в скрипт (придется открываьть у себя в блокноте этот нещастный скрипт, заиисывать туда адрес нарушителя, потом все сохранять, и заливать обновленный скрипт на сайт).... этоже долго. А если все адреса хранятся в файлы - просто у себя в админ панели в строку ввел ip и нажал ОК и все. Это проще.
    .
    .Странно почему в рунете этот скрипт о котором я начал разговор так широко распространен, на всех форумах везде он встречатся, все рекомендуют, а в итоге он нерабочий o_O

    // Добавлено 14:34

    Gifts
    Ура!
    Респект вам, работает.

    // Добавлено 15:42

    Друзья а вот ещё такой вопрос, может немного смешной покажется или глупый, ну неважно. Из какого файла будет читать быстрее, ban.txt , ban.dat или ban.log. Или безразницы какое там расширение?

    //Gifts: объединил посты
     
    #20049 Кишин, 17 Feb 2012
    Last edited by a moderator: 17 Feb 2012
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Кишин
    Без разницы.

    Если ваше сообщение последнее и вы хотите что-то добавить - используйте, пожалуйста, кнопку "Edit"
     
    _________________________
  11. KeNtAvRrr

    KeNtAvRrr New Member

    Joined:
    23 Jul 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Как сделать так: в форму вводишь текст, например TAKOYTEXT и в новой вкладке переходит на сайт trololo.ru/TAKOYTEXT/test.html Заранее спасибо
     
  12. Feksess

    Feksess New Member

    Joined:
    23 Jul 2009
    Messages:
    57
    Likes Received:
    3
    Reputations:
    -1
    PHP:
    <!DOCTYPE HTML>
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="main.css" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <form action="" method="POST">
    <input type="text" name="text" />
    <input type="submit" />
    </form>
    <?php
    $text 
    $_POST['text'];
    if(
    $text){
    echo 
    "<script>document.location.href='trololo.ru/$text/test.html';</script>\n";
    }
    ?>
    </body>
    </html>
     
  13. piupiu

    piupiu Banned

    Joined:
    14 Mar 2011
    Messages:
    11
    Likes Received:
    1
    Reputations:
    5
    Подскажите скрипт, который вытащит Мыльники из sql базы?
     
  14. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    PHP:
    preg_match_all('/[0-9a-z_-]{2,32}@[0-9a-z_-]{2,32}\.[a-z]{2,5}/i',file_get_contents('dump.sql'), $emails);
     
  15. xelex999

    xelex999 Member

    Joined:
    25 Jun 2008
    Messages:
    19
    Likes Received:
    5
    Reputations:
    0
    Привет,помогите порешить проблему

    $spintax->spin('{{Hello|Hi} my name is {Ron|Ronald}|Another random {sentence|{statement|phrase|saying}}}'); так работает

    если вставляю переменную то ошибки всякие
    самих переменных две $title и $description
    $title = одна строка {sda|xsa|dfr} и здесь решилось так

    $lines = file('title.txt');
    foreach($lines as $single_line)


    $description = много строк {sda|xsa|dfr}
    {sda|xsa|dfr}
    {sda|xsa|dfr}

    и засада никак не хочет работать, плиз прошу помочи пожалуцста
     
  16. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    вопрос немного не по теме.
    изучаю php.
    хочу написать для себя игру на php+js.
    лучше использовать чистый пхп или фреймворк(ни разу с ними не работал, но читал), если да, то какой)
     
  17. ocheretko

    ocheretko Banned

    Joined:
    15 May 2010
    Messages:
    144
    Likes Received:
    51
    Reputations:
    116
    как именно вставляешь переменную? Для одинарных кавычек это так:
    $var = 'aaa'.$test.'fgdsgsd';
    для двойных можно так:
    $var = "aaa$testfgdsgsd";

    или вопрос не в этом?
     
  18. ocheretko

    ocheretko Banned

    Joined:
    15 May 2010
    Messages:
    144
    Likes Received:
    51
    Reputations:
    116
    Если для себя - можешь на фреймворке. Если для бизнеса - на чистом пхп
     
  19. wacky

    wacky Member

    Joined:
    30 Jan 2012
    Messages:
    42
    Likes Received:
    7
    Reputations:
    6
    как поделить без остатка на php или проверить есть ли остаток у частного?
     
  20. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8

    PHP:
    $a $b == 0
    Если выражение true значит без остатка, если false остаток есть. (При условии, что a >= b).

    update:

    Не знаю как делить без остатка. Если при делении получил число с плавающей точкой, т.е. float то можешь его перевести в int (в целое).

    PHP:
    $c = (int)($a $b)
     
    #20060 R0nin, 22 Feb 2012
    Last edited: 22 Feb 2012
Thread Status:
Not open for further replies.