Skocz do zawartości

Skrypt do lapania botów odwiedzających strone.


jamesisko

Rekomendowane odpowiedzi

drobna moja uwaga dla wszystkich, którzy mają różne problemy z wykorzystaniem tego skryptu.

skrypt bazuje na zmiennych deklarowanych w klasie jako zmienne global

samo w sobie nie jest to oczywiście żadnym błędem, ale może powodować Wam problemy, jeśli macie nieco bardziej zabezpieczony hosting (i nie ma to bezpośrednio nic wspólnego z safe_mode... to dodatkowa opcja, aczkolwiek najczęściej uruchamiana razem).

Zmienne deklarowane w ten sposób NIE ZADZIAŁAJĄ jeżeli php w waszym hostingu działa z opcja

register_globals=off

funkcje klasy nie wyłapią wtedy po prostu wartości zmiennych. I to może być np problemem połączeń z bazą danych, bowiem funkcja Baza() pobiera własnie globale... Skutkiem czego dostajecie komunikaty błędów...

I to chyba w dodatku myląco (takie mam wrażenie, ale moge się mylić bom juz nieco śpiący) dostajecie komunikat "błędne zapytanie", bo to jest wskazane jako die() dla mysql_query()... a komunikat który mówiłby o błędzie połączenia - przy takiej konstrukcji klasy - nie ma się kiedy pokazać....

Spora część hostingodawców wyłączyła już opcję r_g ze względów bezpieczeństwa (było troche dymu z różnymi skryptami...). Prosty sposób, żeby to sprawdzić:

plik test.php

<?
echo 'register_globals = ' . ini_get('register_globals') . "\n";
?>

wrzucic na swój serwer, wywołac w przeglądarce.

TEORETYCZNIE: mozna dopisac sobie na początku skryptu:

ini_set("register_globals","1");

ALE:

1. nie zadziala to na wszystkich wersjach PHP

2. (to uwaga do jamesisko: ) generalnie nie należy pisać skryptów ze zmiennymi global a przekazywanymi jako par. funkcji

Jakkolwiek skrypt - sam w sobie b. uzyteczny ;) (a przynajmniej idea, bo wykorzystanie i analiza tego co gromadzi, to już zupełnie inna sprawa ;)) Więc prosze nie traktować tego jako druzgocącą krytykę a tylko "przyczynek" do jego rozwoju.

PS:

szybka modyfikacja

(piszę z palca i bez testu, jako hint tylko; sorry za reformat kodu, ale mniej miejsca zajmie i chyba czytelniejszy :) )


<?
/*
* Autorem skryptu jest Jamesisko: james@red7.pl
* Skrypt jest całkowicie darmowy, można go rozpowszechniać, modyfikować. Słowem używać dowoli.
*
* Modyfikacja by Mistral: mistral@fornetmk.com 
* (tylko wzór połączenia z bazą, trzeba zmienić pobranie innych zmiennych przekazywanych globalnie)
*/ 
$bcpl = "0";
$liczba_wynikow = "100";
$tabela_botow = "roboty";
$tytul_strony = "Statystyki domeny $_SERVER[HTTP_HOST]";



/**
* by Mistral:
*  zmiany:
*  cfg połączenia przeniesiony do funkcji poza klasą
*/

function baza_getcfg() {
 $db_dane["hostname"] = "twoj_serwer_sql";  
 $db_dane["user"] = "nazwa_uzytkownika_bazy_danych";
 $db_dane["password"] = "haslo_uzytkownika_bazy_danych";
 $db_dane["db"] = "twoja_baza_danych";	
return $db_dane;
}


class Baza {

 var $hostname;
 var $username;
 var $password;
 var $dbname;
 var $tablename;
 var $connection;
 var $wynikquery;
 var $blad = 'errmsg';

 function Baza($err = 'errmsg') {
/**
* by Mistral:
*  zmiany:
*  wywołanie nowej funkcji i przepisanie danych z tablicy $db_dane
*/
$db_dane=baza_getcfg();
$this->blad = $err;
$this->hostname = $db_dane['hostname'];
$this->username = $db_dane['user'];
$this->password = $db_dane['password'];
$this->dbname = $db_dane['db'];
$this->connect();
 }


 function connect(){
  $this->connection = @mysql_connect($this->hostname, $this->username, $this->password) 
  or $this->error("::.Blad polaczenia z MySQL .::.");
  @mysql_select_db($this->dbname)
  or $this->error("::. Nie mozna polaczyc z baza danych .::.");
 }

 function error($errormesg) {
  echo "<b>.$errormesg</b><br>";
  if('halt' == $this->blad) { exit; }
 }

 function query($sql) {
/**
* by Mistral:
*  zmiany:
*  $this->connection przepisane do zmiennej $con. 
*  teraz powinien mieć szanse pokazać się ewentualny err z mysql_connect();
*/
  $con=$this->connection;
  $this->wynikquery = @mysql_query($sql, $con) or die("<center><BR><BR><font color=\"red\">Bledne zapytanie: <b>$sql</b></font></center>");
  return $this->wynikquery;
 }   

}



$DB = new Baza();
$base_url_to_jump = $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$base_url_to_jump = "https://".$base_url_to_jump;

?>

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 129
  • Dodano
  • Ostatniej odpowiedzi
  • 3 tygodnie później...
  • 3 miesiące temu...

Powoli, powoli - moze w czerwcu, gdy juz sie uporam z kodem na zamowienie, dokoncze.

Co jakis czas mam natchnienie i zmieniam rozne rzeczy, dodaje, modyfikuje.

Wprawdzie dodajnie jeszcze tylko by roboty byly pokazywane juz w pelni ufunkcjonalni skrypt.

W planach wykresy, przeszukiwanie wg dat, analizy (np. najczesciej wpisywanych do wyszukiwarki slow z ktorych bylo wejscie w polaczeniu z pozycja danej strony w danym dniu w google, analiza robotow).

Oj duzo mam juz w pliku TODO - ale kiedys to zrobie..

Aha bo zapomne. Takie delikatne demko:

www.stats.dobre-firmy.pl/demo.php

update: demko lekko poprawione. Dane z tabeli są aktulizowane co 10 min.

W pelnej wrsji robi to cron - tutaj jesli user odwiedzi staty w czasie dluzsym niz 10 min od daty utworzenia pliku cache logu - tworzy sie nowy plik cache, ktory ma żywotność min 10 min. Poprostu przez 10 min od ostatniego utworzenia pliku cache dane zawarte w nim sie nie zmienia;)

co wiecej - jest to z opcja analizowania nie tylko stron, ktore stoja u nas na serzerze, gdzie katalogami najszybciej mozna pliki pobierac.

Jest tez opcja remote users - tutaj jesli komus pozycjonujemy strone ktora jest na innym serwerze. Tez mozna sledzic zachowania sie uzytkownikow jak i botow.

pozdr.

Odnośnik do komentarza
Udostępnij na innych stronach

Witam,

na szybko zmontowalem werseje demo statystyk dla pozycjonerów :)

Mozna sprawdzic jej dzialanie na żywych danych pod adresem:

https://www.stats.dobre-firmy.pl/demo.php

Uwagi mile widziane.

Aha, kilka informacji:

1. statystyka używa MySQL'a jednak w sposób nie obciążający bazy danych.

Wszystko jest zapisywane do plikow, z których to crontab w określonych porach robi zapis danych z plików do mysql. W wersji demo przy wyświetlaniu statow jest sprawdzana data utworzenia pliku cache z danymi w tabelce. Tworzy sie nowy plik cache jeśli przy wizycie od daty utworzenia starego cache minelo 20 min.

Cron aktulizuje sql'a z danych plikow co 15 min. Tutaj jest tylko aktualizacja cache danych pobranych z sql - stad dluzszy czas. Ale to jest tylko demko ;)

W wersji pelnej .. dla mnie - tym zajmuje sie cron.

2. Dane referer i roboty w wersji demo sa brane bezposrendio z sql. W wersji pelnej takze sa to pliki cache aktualizowane przez crona.

3. Zakladajac ze te statystyki bedzie ogladala jedna osoba, inaczej ... nie masa ludzi ;) obciazenie dla sql jest minimalne i nie konieczne jest keszowanie wynikow.

4. W wersji demo tego nie widac, ale jest opcja by wyświetlać statystyki stron z serwerow zdalnych. Kod byl przygotowany dla stron hostowanych na jednym serwerze. Z racji tego ze zaszla potrzeba sledzenia co sie dzieje na stronach klientów - dodalem ta opcje. Akurat w demo nie chce pokazywac statow swoich klientow. Jesli ktos jest chetny - prosze o kontakt - dorzuce jego staty jako usera remote.

5. W wersji kolejnej bedzie dokladniejsze rozrownienie botow - tutaj tak na szybko to zostalo przygotowane.

Z racji tego iz dla mnie najwazniejsze sa boty google, opjca wyswietlaia botow G jest zaznaczona default. Jesli sie ja odznaczy - pokaza sie wystkie robale ;)

6. Statystyki zachowały swoją łatwość instalacji, jak również zotała poprawiona niezależność od konfiguracji serwerów. Być może o ile będzie zapotrzebowanie skrytp ten doczeka sie wersji bez sqlowej - ale to chyba nie ma sensu - mniejsze mozliwosci - wiekszy naklad pracy.

OK, czekam na sugesie i jakieś podpiwiedzi co jeszcze mozna tam dodac.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 5 tygodni później...
  • 11 miesięcy temu...
  • 1 miesiąc temu...

Chęci to i ma, tylko z czasem krucho na zrobienie wersji open.

Aktualna wersja wygląda mniej więcej tak:

https://www.stats.dobre-firmy.pl

Login: forum

Haslo: optymalizacja

zimą będę wolniejszy to popracuję nad wersją otwartą. tutaj mam kod który obsluguje ponad 200 domen na jednym serwerze, wspomagany jest skryptami shellowym do czyszczenia bazy mysql bo szybko sie zapycha przy wiekszej ilosci domen.

Poprostu trzeba zmienic to na cos bardziej uniwersalnego, bo narazie to jest kod pod konkretny serwer. Jest też opcja monitorowania stron klientów umieszczonych na innych serwerach.

Te domeny które tutaj widać w tym panelu ..umm testuje jak google to widzi taki i inny układ linków i tekstów.

Czas pokaże jak to w praktyce wyjdzie.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności