Нефурычит простой скрипт, помогите. Здраствуйте уважаемые знатоки. Как то нарыл в рунете скрипт бана по 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 . Он неработает. Если один ip записан, работает, если более - неработает. Мне нужен именно этот скрипт так как мне нужно чтобы все ip хранились только в файле. Есть конечно много скриптов бана, но там ip прописываются в самом скрпте, а не в отдельном файле =( Неподходит, нжен этот. Помогите разобратся. Почему перестает работать если в ban.txt вписать более одного айпишника. Может изменить его как то? Заранее благодарю.
как-то так: PHP: <?php $ip = $_SERVER['REMOTE_ADDR']; $ban = file("ban.txt"); foreach($ban as $nax){ if($ip = $nax){ die("Доступ запрещён!"); } } ?>
MaXSS Не не работает. Банит всех подряд. Даже если не прописан твой ip в ban.txt . . . .Ладно я спать уже пойду
Тогда так: PHP: <?php $ip = $_SERVER['REMOTE_ADDR']; $ban = file_get_contents("ban.txt"); if(preg_match("/$ip/",$ban)){ die("Доступ запрещён!"); } ?>
Кишин 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 адреса, что доставит много приятных минут при отладке
Если есть возможность - храните список 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к), от этого и нужно отталкиваться, чтобы написать самый оптимальный код под эту боевую задачу
Gifts Спасибо, щас посмотрю. ocheretko Нет в самом скрипте в массиве это неудобно, это придется мутузить скрипт всевремя и записывать в него новый ip. Ведь забаненный айпишник проше записать в файл, чем в скрипт (придется открываьть у себя в блокноте этот нещастный скрипт, заиисывать туда адрес нарушителя, потом все сохранять, и заливать обновленный скрипт на сайт).... этоже долго. А если все адреса хранятся в файлы - просто у себя в админ панели в строку ввел ip и нажал ОК и все. Это проще. . .Странно почему в рунете этот скрипт о котором я начал разговор так широко распространен, на всех форумах везде он встречатся, все рекомендуют, а в итоге он нерабочий // Добавлено 14:34 Gifts Ура! Респект вам, работает. // Добавлено 15:42 Друзья а вот ещё такой вопрос, может немного смешной покажется или глупый, ну неважно. Из какого файла будет читать быстрее, ban.txt , ban.dat или ban.log. Или безразницы какое там расширение? //Gifts: объединил посты
Кишин Без разницы. Если ваше сообщение последнее и вы хотите что-то добавить - используйте, пожалуйста, кнопку "Edit"
Как сделать так: в форму вводишь текст, например TAKOYTEXT и в новой вкладке переходит на сайт trololo.ru/TAKOYTEXT/test.html Заранее спасибо
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>
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);
Привет,помогите порешить проблему $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} и засада никак не хочет работать, плиз прошу помочи пожалуцста
вопрос немного не по теме. изучаю php. хочу написать для себя игру на php+js. лучше использовать чистый пхп или фреймворк(ни разу с ними не работал, но читал), если да, то какой)
как именно вставляешь переменную? Для одинарных кавычек это так: $var = 'aaa'.$test.'fgdsgsd'; для двойных можно так: $var = "aaa$testfgdsgsd"; или вопрос не в этом?
PHP: $a % $b == 0 Если выражение true значит без остатка, если false остаток есть. (При условии, что a >= b). update: Не знаю как делить без остатка. Если при делении получил число с плавающей точкой, т.е. float то можешь его перевести в int (в целое). PHP: $c = (int)($a / $b)