Скрипт не записывает не все полученные данные

Тема в разделе "PHP", создана пользователем diab0583, 13 окт 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. diab0583

    diab0583

    Регистр.:
    9 июл 2007
    Сообщения:
    199
    Симпатии:
    25
    PHP класс
    flooders.inc.php:
    PHP:
    <?
    class 
    Flooders {
    var 
    $filename
    var 
    $timeout
    var 
    $log
    var 
    $AGENTS
    function 
    Flooders($filename=\"flooders.txt\",$timeout=600) {
    $this->filename=$filename;
    $this->timeout=$timeout;
    $this->AGENTS=Array();
    $this->log=\"\";
    }
    function SetLogFileName(
    $filename) {
    $this->log=$filename;
    }
    function Check(
    $http_error=0) {
    GLOBAL 
    $HTTP_SERVER_VARS;
    $ip1=$HTTP_SERVER_VARS[\"REMOTE_ADDR\"];
    $ip2=$HTTP_SERVER_VARS[\"HTTP_X_FORWARDED_FOR\"];
    $ip1=str_replace(\":\",\"_\",$ip1);
    $ip2=str_replace(\":\",\"_\",$ip2);
    $curtime=time();
    $d=@file($this->filename);
    if (!is_array(
    $d)) {print \"Ошибка чтения из файла &quot;\".$this->filename.\"&quot;.\";return(false);}
    $found=false;
    for (
    $i=0;$i<count($d);$i++) {
    $e=explode(\" : \",$d[$i]);
    if (
    $e[1]==$ip1 && trim($e[2])==$ip2 && $e[0]+$this->timeout>$curtime{$found=true;break;}
    }
    if (
    $http_error==404 && $found==true) {
    header(\"HTTP/1.0 404 Not Found\");
    die(\"<!DOCTYPE HTML PUBLIC \\\"-//IETF//DTD HTML 2.0//EN\\\">\\n<HTML><HEAD>\\n<TITLE>404 Not Found</TITLE>\\n</HEAD><BODY>\\n<H1>Not Found</H1>\\nThe requested URL \".
    $HTTP_SERVER_VARS[\"REQUEST_URI\"].\" was not found on this server.<P>\\n<HR>\\n\".$HTTP_SERVER_VARS[\"SERVER_SIGNATURE\"].\"\\n</BODY></HTML>\");
    }
    if (
    $http_error==403 && $found==true) {
    header(\"HTTP/1.0 403 Forbidden\");
    die(\"<!DOCTYPE HTML PUBLIC \\\"-//IETF//DTD HTML 2.0//EN\\\">\\n<HTML><HEAD>\\n<TITLE>403 Forbidden</TITLE>\\n</HEAD><BODY>\\n<H1>Forbidden</H1>\\nYou don\'t have permission to access \".
    $HTTP_SERVER_VARS[\"REQUEST_URI\"].\"\\non this server.<P>\\n<HR>\\n\".$HTTP_SERVER_VARS[\"SERVER_SIGNATURE\"].\"\\n</BODY></HTML>\");
    }
    return(
    $found);
    }
    function Ban() {
    GLOBAL 
    $HTTP_SERVER_VARS;
    $agent=\" \".$HTTP_SERVER_VARS[\"HTTP_USER_AGENT\"];
    for (
    $i=0;$i<count($this->AGENTS);$i++) {
    if (strpos(
    $agent,$this->AGENTS[$i])) return;
    }
    $ip1=$HTTP_SERVER_VARS[\"REMOTE_ADDR\"];
    $ip2=$HTTP_SERVER_VARS[\"HTTP_X_FORWARDED_FOR\"];
    $ip1=str_replace(\":\",\"_\",$ip1);
    $ip2=str_replace(\":\",\"_\",$ip2);
    $curtime=time();
    $d=@file($this->filename);
    if (!is_array(
    $d)) {print \"Ошибка чтения из файла &quot;\".$this->filename.\"&quot;.\";}
    for (
    $i=0;$i<count($d);$i++) {
    $e=explode(\" : \",$d[$i]);
    if (
    $e[1]==$ip1 && trim($e[2])==$ip2) unset($d[$i]);
    }
    if (need_add) {
    if (!empty(
    $this->log)) {
    $fw=fopen($this->log,\"at\");
    if (
    $fw) {
    fputs(
    $fw, date(\"Y-m-d H:i:s\").\" [\".$ip1.\"|\".$ip2.\"]\".$agent.\"\\n\");
    fclose(
    $fw);
    }
    }
    $d[]=$curtime.\" : \".$ip1.\" : \".$ip2.\"\\n\";
    }
    $fw=@fopen($this->filename,\"wt\");
    if (!
    $fw) {print \"Ошибка записи в файла &quot;\".$this->filename.\"&quot;.\";return;}
    foreach (
    $d as $e) fputs($fw,$e);
    fclose(
    $fw);
    }
    function AddAlowAgent(
    $agent) {
    $this->AGENTS[]=$agent;
    }
    }
    ?>
    Примеры использования
    Пример 1
    Этот код должен быть установлен на скрытой странице:
    PHP:
    <?
    include \
    "flooders.inc.php\";
    $f=new Flooders();
    $f->Ban();
    ?>
    Этот код должен быть установлен в верхней части всех страниц сайта:
    <?
    include \"flooders.inc.php\";
    $f=new Flooders();
    $f->Check(404);
    ?>
    Пример 2 - не запрещающий известных поисковых роботов.
    Этот код должен быть установлен на скрытой странице:
    <?
    include \"flooders.inc.php\";
    $f=new Flooders(\"/tmp/ban.txt\");
    $f->AddAlowAgent(\"StackRambler\");
    $f->AddAlowAgent(\"Googlebot\");
    $f->AddAlowAgent(\"Yandex\");
    $f->AddAlowAgent(\"Aport\");
    $f->AddAlowAgent(\"msnbot\");
    $f->AddAlowAgent(\"FAST-WebCrawler\");
    $f->AddAlowAgent(\"Slurp/cat\");
    $f->AddAlowAgent(\"ASPseek/1.2.10\");
    $f->AddAlowAgent(\"CNSearch\");
    $f->SetLogFileName(\"/tmp/ban.log\");
    $f->Ban();
    ?>
    Этот код должен быть установлен в верхней части всех страниц сайта:
    PHP:
    <?
    include \
    "flooders.inc.php\";
    $f=new Flooders(\"/tmp/ban.txt\");
    $f->Check(403);
    ?>
    В бан листе, на локалке и на старом сервере вот так 1282238139 : 127.0.0.1 :
    А на новом вот так 1286955515 : :
    В логах, на локалке и на старом сервере вот так 2010-08-17 15:28:24 [127.0.0.1|] Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
    А на новом вот так 2010-10-13 11:38:35 [|]
    P.S копировал с сайта http://www.realcoding.net/articles/kak-zashchitit-sait-ot-totalnogo-skachivaniya.html потому кавычки закоментены пример \"FAST-WebCrawler\"
    Что-то в настройках php?

    Если нет возможности по коду определить я могу попытаться снять со старого сервера код(без слешей) .
     
  2. DrCanibal

    DrCanibal Писатель

    Регистр.:
    10 апр 2007
    Сообщения:
    8
    Симпатии:
    4
    Вполне вероятно что скрипт работает не везде из-за того, что испульзуются переменные типа $HTTP_SERVER_VARS.
    Попробуйте заменить на $_SERVER или getenv()
    $HTTP_SERVER_VARS['REMOTE_ADDR'] это то же самое, что и
    $_SERVER['REMOTE_ADDR'] или getenv('REMOTE_ADDR')
     
  3. diab0583

    diab0583

    Регистр.:
    9 июл 2007
    Сообщения:
    199
    Симпатии:
    25
    Дело в том, что я куском подобного кода получаю инфу на почту с помощью функции mail. Скрипт забирает IP, браузер, ОС и т.д...
    REMOTE_ADDR и т.д работает.
     
Статус темы:
Закрыта.