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

Статус
В этой теме нельзя размещать новые ответы.

diab0583

Знаток
Регистрация
9 Июл 2007
Сообщения
199
Реакции
28
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 копировал с сайта потому кавычки закоментены пример \"FAST-WebCrawler\"
Что-то в настройках php?

Если нет возможности по коду определить я могу попытаться снять со старого сервера код(без слешей) .
 
Вполне вероятно что скрипт работает не везде из-за того, что испульзуются переменные типа $HTTP_SERVER_VARS.
Попробуйте заменить на $_SERVER или getenv()
$HTTP_SERVER_VARS['REMOTE_ADDR'] это то же самое, что и
$_SERVER['REMOTE_ADDR'] или getenv('REMOTE_ADDR')
 
Дело в том, что я куском подобного кода получаю инфу на почту с помощью функции mail. Скрипт забирает IP, браузер, ОС и т.д...
REMOTE_ADDR и т.д работает.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху