14Aug

Snadno rozebrat / Search Hledaný řetězce webové stránce je z Apache logů pomocí PHP awk a sed utility příkazové řádky linux

6 díly: Použijte awk a sed analyzovat Apache log soubory pro uživatel zadal vyhledávací dotazy známé problémy Version 2: Méně příkazového řádku předzpracování a další zpracování php Úkoly Tipy Tricks & amp;Varování Komentáře

To HowTo vám ukáže, jak snadno na příkazovém řádku Linux analyzovat vaše log soubory apache získat hledaný řetězec dotazu data, která uživatelé zadat, aby si své webové stránky ve vyhledávači.Zahrnul jsem vyhledávací GUI php stejně pro snadné použití.

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc
Obsah
  • 1 Využití awk a sed analyzovat Apache log soubory pro uživatel zadal vyhledávání výrazů
  • 2 známých problémů
  • 3 Version 2: Méně příkazový řádek předzpracování a další zpracování php
  • 4 Úkoly
  • 5 Tipy triky & amp;Varování
  • 6 Komentáře
Ad

Použít awk a sed analyzovat Apache log soubory pro uživatel zadal vyhledávání výrazů

Zde je syrové kód pro svou práci.Všimněte si, že $ Title2 třeba nahradit tím, co hledáte, ALE prostory jsou nahrazeny "\ +".

Například: "Jak najít velké lízátko" by byl "Jak \ + na \ + najít \ + a \ + velký \ + lízátko"

To proto, že mám v plánu volat z funkce PHP, kde budunaplnit $ Title2 jak uvidíte později.Mohl jsem dát egrep

později, ale pak nebudete mít možnost vyhledávání jak název stránky a dotazy.Můj původní verze jen hledal dotazy, ale chtěl jsem funkci jsem mohl snadno volat na dané stránce a vidět všechny dotazy, které uživatelé zadali během posledních několika týdnů.

kočka /var/log/virtualmin/VisiHow.com_access_log |#Get Data z egrep přístup log "(q | p) =" |#use Pouze záznamy, které mají pravděpodobně vyhledávací dotazy sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do některé změny formátování a co je nejdůležitější měnit všechny mezerynebo zdůrazňuje, že k + egrep -I "$ Title2" | #search za $ Title2 awk '{print $ 11}' | #extract vyhledávat pouze údaje sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab všechny údaje začínající q = sed 's / q = // g; s / + / / g, s /% / 22 "/ g, s /% 20/ / g; "|#reformat k lidskému čitelném formátu cut -d "& amp;"-f 1 |#strip mimo jiné parametry awk '{print $ 0 "
"}' #add odkaz přestávky
, protože jsme v plánu výstup na webovou stránku

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc

== Pojďme vytvořit PHP

HTML GUI wrapper pro to teď ==

Aby to bylo snadno s nimi nakládáno chceme získat přístup k datům dotaz uživatele z webové stránky vyhledávací formulář.

queries.php

& lt; title & gt; uživatelských dotazů & lt; / title & gt;& Lt; meta name = "roboty" content = "noindex" & gt;

& lt; forma name = "sform" method = "get" & gt;Hledání Název: & lt; size = hodnota vstup "80" = "& lt; php echo $ _GET [ 'title']; & gt;?"name = "název" type = "text" & gt;& Lt; input value = "Search" type = "submit" & gt;TIP: Můžete použít částečnou název, nebo dokonce RegEx jako & lt; / form & gt; "Samsung * škodu."

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc

$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ jak / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ Title2);

$ bigcmd = & lt; & lt; & lt; eof

egrep -i "(q | p) =" |#use Pouze záznamy, které mají pravděpodobně vyhledávací dotazy sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do některé změny formátování a co je nejdůležitější měnit všechny mezerynebo zdůrazňuje, že k + egrep -i "$ Title2" | #search pro Title2 awk '{print $ 11}' | #extract vyhledávat pouze údaje sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab všechny údaje začínající q = sed 's / q = // g; s / + / / g, s /% / 22 "/ g, s /% 20 // g; "|#reformat k lidskému čitelném formátu cut -d "& amp;"-f 1 |#strip mimo jiné parametry awk '{print $ 0 "
"}' #add
odkaz přestávky, protože plánujeme výstup na webovou stránku

OSZ;

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc

-li "{print

Vyhledávání" $ title "..."( $ title = "!)";print "běžný týden. ..
";print `cat /var/log/virtualmin/visihow.com_access_log |#Get Data z přístupového protokolu $ bigcmd `;// Podporujeme p = příliš, protože Yahoo používá to. .. divné kachna lol for( $ i = 1; i $ & lt; 6; $ i ++){ print "
$ i týden( S) před
";vytisknout `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Data z přístupového protokolu $ bigcmd `;}}

& gt?;

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc

& lt; / OSZ

známých problémů

grep se zrychluje záznamy s referenčním údajům, takže se vrací nežádoucí záznamy.Například pokud někdo hledá "iPhone" a uživatel byl na straně iPhone a pak klikne na přejít na stránku Samsung, tento kód zvedne iPhone od referrera a tudíž zahrnuje opravu údajů, které by nemělo.Já jsem pracoval na verzi 2, který dělá mnohem více a opravit tuto chybu tím, že pohybuje hodně z příkazového řádku předzpracování do php.Kód bude více tupé, ale dá mnohem užitečnější a přesné údaje.

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc

Verze 2: Méně příkazový řádek předzpracování a další zpracování php

Tato verze má následující výhody / nevýhody:

  • Méně příkazového řádku předzpracování znamená delší kód
  • Více php znamená větší kontrolu a funkce
  • Ignoruje více požadavků duplicitních ze stejné IP
  • počítá několikanásobného prohledávání namísto výpis jim vícekrát
  • Zobrazit údaje o trendech zobrazením týdenní součty
  • výstup jev rolovací divs pro snadné prohlížení oblíbených stránek
  • řazeny dle délky dotazu činil, což znamená přibližně více populární stránky ukazují první
  • trochu rychlé a špinavé javascript & amp;css, aby se prvky div auto expandovat pro detailní prohlížení

& lt; title & gt; uživatelských dotazů & lt; / title & gt;& Lt; meta name = "roboty" content = "noindex" & gt;

& lt; forma name = "sform" method = "get" & gt;Hledání Název:? & Lt; size = hodnota vstup "80" = "& lt; php
if( strlen( $ _ GET [ 'title']) & gt; 0){
echo $ _GET [ 'title'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; input value = "Search" type = "submit" & gt;
TIP: Vložte * vidět všechno.Můžete použít částečnou název, nebo dokonce regulární výraz jako "Samsung * škoda." & Lt; / form & gt;

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc sortbylen funkce

( $ a, $ b){ return

strlen( $ b) -strlen( $ a);

}

$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ jak / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ Title2);

$ bigcmd = & lt; & lt; & lt; eof

egrep -i "(q | p) =" |#use Pouze záznamy, které mají pravděpodobně vyhledávací dotazy sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do některé změny formátování a co je nejdůležitější měnit všechny mezerynebo zdůrazňuje, že k + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i "$ Title2" #search pro Title2

OSZ;

Byly tyto informace užitečné Ano | Ne | potřebuji pomoc
?

if( $ title = "!"){

print "hledání" titul $ "..."; for( $ i = 0; i $ & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `cat /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = explode( "\ n", $ searchlogdata), foreach( $ searchlogarray jako $ SDATA){ $ logparts = explode( "", $ SDATA) $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], $ utkání);$ Ss = urldecode( $ zápasy [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ SS)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // keep out URL z vyhledávání na webuif( ($ ip = $ lip) ||( $ ss = $ LSS)!){ $ ret = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array, "sortbylen ');foreach( $ ssdata jak $ key = & gt; $ value){ $ Sarr = explode( "|", $ value);foreach( $ Sarr, jak $ y){ if( strlen( $ y) & gt; 0) $ s2 [$ y] ++;} Arsort( $ s2);foreach( $ s2 jak $ klíčem2 = & gt; $ hodnota2){ $ urldata [$ key] [$ i] = "$ val2: $ key2
.";$ STOT [$ key] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata jak $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata dolarů týdně){ print "
" $ za týden ++ "WEEK( S) před: Celkový počet vyhledávání =" $ STOT [$ url] [$ WK-1] "
.";print "& lt; div onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style = 'šířka: 800px; výška: 100px; border: 1px solid šedá; overflow: scroll '& gt; $ týden ";}}}

& gt?;

Byly tyto informace užitečné?Ano |Ne |Potřebuji pomoc

& lt; / OSZ

Úkoly

seřadit podle délky dotazu jako sekundární druhu, s delších dotazů první

to je vše.Rád bych slyšel vaše zkušenosti s tímto kódem nebo návrhy na zlepšení.

Tipy triky & amp;Varování

  • Poznámka: Podporuji p = jakož i standardní q = protože Yahoo je liché kachna je používá p =
  • Version 2 php je složitější a byl jsem kódování rychle, takže některé z proměnnýchjména byla vybrána špatně.prosím nestěžujte ve formě volné kód.Ale pokud chcete opravit a zdokumentovat jej a přidat ji do wiki jako verze 3, který by fantastické:) zaplatit dopředu!
  • Máte-li problémy s některou z těchto kroků, položit otázku o další pomoc, nebo poštou v sekci komentáře níže.

Komentáře

VisiHow vítá všechny komentáře .Pokud nechcete zůstat v anonymitě, zaregistrovat nebo přihlásit. Je to zdarma.




Daniel
Nejlepší Autor
69 Články Začít
2,601 článku Upraví
24,290 bodů
Daniel je vybavený autor s VisiHow,Daniel dosáhla úrovně "nadporučík" s 24,290 body.Daniel byl zahájen 69 článků a dělal 2,601 článcích úpravy.17,578 lidí číst příspěvky článcích Danielovy.
Zeptejte Daniel
Daniel : Ahoj, jmenuji se Daniel.
Daniel : Mohu vám s vaším problémem o "snadno rozebrat / Search Hledaný řetězce webové stránky se liší od Apache logů pomocí PHP awk a sed příkazové řádky linux utility"?
Přijmi