14Aug

Ľahko rozobrať / Search Hľadaný reťazca webovej stránke je z Apache logov pomocou PHP awk a sed utility príkazového riadku linux

6 diely: Použite awk a sed analyzovať Apache log súbory pre užívateľ zadal vyhľadávacie dotazy známe problémy Version 2: Menej príkazového riadka predspracovania a ďalšie spracovanie php Úlohy Tipy Tricks & amp;Varovanie Komentáre

To HowTo vám ukáže, ako ľahko na príkazovom riadku Linux analyzovať vaše log súbory apache získať hľadaný reťazec dotazu dáta, ktoré užívatelia zadať, aby si svoje webové stránky vo vyhľadávači.Zahrnul som vyhľadávacie GUI php rovnako pre jednoduché použitie.

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc
Obsah
  • 1 Využitie awk a sed analyzovať Apache log súbory pre užívateľ zadal vyhľadávanie výrazov
  • 2 známych problémov
  • 3 Version 2: Menej príkazový riadok predspracovania a ďalšie spracovanie php
  • 4 Úlohy
  • 5 Tipy triky & amp;Varovanie
  • 6 Komentáre
Ad

Použiť awk a sed analyzovať Apache log súbory pre užívateľ zadal vyhľadávanie výrazov

Tu je surové kód pre svoju prácu.Všimnite si, že $ Title2 potrebné nahradiť tým, čo hľadáte, ALE priestory sú nahradené "\ +".

Napríklad: "Ako nájsť veľké lízatko" by bol "Ako \ + na \ + nájsť \ + a \ + veľký \ + lízatko"

To preto, že mám v pláne volať z funkcie PHP, kde budemnaplniť $ Title2 ako uvidíte neskôr.Mohol som dať egrep

neskôr, ale potom nebudete mať možnosť vyhľadávania ako názov stránky a otázky.Môj pôvodný verzia len hľadal otázky, ale chcel som funkciu som mohol ľahko volať na danej stránke a vidieť všetky otázky, ktoré používatelia zadali počas posledných niekoľkých týždňov.

mačka /var/log/virtualmin/VisiHow.com_access_log |#Get Dáta z egrep prístup log "(q | p) =" |#use Iba záznamy, ktoré majú pravdepodobne vyhľadávacie dotazy sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do niektoré zmeny formátovania a čo je najdôležitejšie meniť všetky medzeryalebo zdôrazňuje, že k + egrep -I "$ Title2" | #search za $ Title2 awk '{print $ 11}' | #extract vyhľadávať len údaje sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab všetky údaje začínajúce q = sed 's / q = // g; s / + / / g, s /% / 22 "/ g, s /% 20/ / g; "|#reformat k ľudskému čitateľnom formáte cut -d "& amp;"-f 1 |#strip okrem iného parametre awk '{print $ 0 "
"}' #add odkaz prestávky
, pretože sme v pláne výstup na webovú stránku

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc

== Poďme vytvoriť PHP

HTML GUI wrapper pre to teraz ==

Aby to bolo ľahko s nimi nakladané chceme získať prístup k dátam dotaz používateľa z webovej stránky vyhľadávací formulár.

queries.php

& lt; title & gt; užívateľských otázok & lt; / title & gt;& Lt; meta name = "roboty" content = "noindex" & gt;

& lt; forma name = "SFOR" method = "get" & gt;Hľadanie Názov: & lt; size = hodnota vstup "80" = "& lt; php echo $ _GET [ 'title']; & gt;? "name = "názov" type = "text" & gt;& Lt; input value = "Search" type = "submit" & gt;TIP: Môžete použiť čiastočnú názov, alebo dokonca Regex ako & lt; / form & gt; "Samsung * škodu."

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc

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

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

egrep -i "(q | p) =" |#use Iba záznamy, ktoré majú pravdepodobne vyhľadávacie dotazy sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do niektoré zmeny formátovania a čo je najdôležitejšie meniť všetky medzeryalebo zdôrazňuje, že k + egrep -i "$ Title2" | #search pre Title2 awk '{print $ 11}' | #extract vyhľadávať len údaje sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab všetky údaje začínajúce q = sed 's / q = // g; s / + / / g, s /% / 22 "/ g, s /% 20 // g; "|#reformat k ľudskému čitateľnom formáte cut -d "& amp;"-f 1 |#strip okrem iného parametre awk '{print $ 0 "
"}' #add
odkaz prestávky, pretože plánujeme výstup na webovú stránku

OSZ;

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc

ak "{print

Vyhľadávanie" $ title "..."( $ title = "!)";print "bežný týždeň. ..
";print `cat /var/log/virtualmin/visihow.com_access_log |#Get Dáta z prístupového protokolu $ bigcmd `;// Podporujeme p = príliš, pretože Yahoo používa to. .. divné kačica lol for( $ i = 1; i $ & lt; 6; $ i ++){ print "
$ aj týždeň( S) pred
";vytlačiť `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Dáta z prístupového protokolu $ bigcmd `;}}

& gt? ;

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc

& lt; / OSZ

známych problémov

grep sa zrýchľuje záznamy s referenčným údajom, takže sa vracia nežiaduce záznamy.Napríklad ak niekto hľadá "iPhone" a užívateľ bol na strane iPhone a potom klikne na prejsť na stránku Samsung, tento kód zdvihne iPhone od referrer a teda zahŕňa opravu údajov, ktoré by nemalo.Ja som pracoval na verziu 2, ktorý robí oveľa viac a opraviť túto chybu tým, že pohybuje veľa z príkazového riadka predspracovania do php.Kód bude viac tupé, ale dá oveľa užitočnejšie a presné údaje.

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc

Verzia 2: Menej príkazový riadok predspracovania a ďalšie spracovanie php

Táto verzia má nasledujúce výhody / nevýhody:

  • Menej príkazového riadka predspracovanie znamená dlhší kód
  • viac php znamená väčšiu kontrolu a funkcie
  • Ignoruje viac požiadaviek duplicitných z rovnakej IP
  • počíta niekoľkonásobného prehľadávanie namiesto výpis im viackrát
  • Zobraziť informácie o trendoch zobrazením týždenné súčty
  • výstup jev rolovacie divs pre jednoduché prehliadanie obľúbených stránok
  • radené podľa dĺžky dopytu predstavoval, čo znamená približne viac populárne stránky ukazujú prvé
  • trochu rýchle a špinavé javascript & amp;css, aby sa prvky div auto expandovať pre detailné prehliadanie

& lt; title & gt; užívateľských otázok & lt; / title & gt;& Lt; meta name = "roboty" content = "noindex" & gt;

& lt; forma name = "SFOR" method = "get" & gt;Hľadanie Názov:? & 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 * vidieť všetko.Môžete použiť čiastočnú názov, alebo dokonca regulárny výraz ako "Samsung * škoda." & Lt; / form & gt;

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc sortbylen funkcie

( $ a, $ b){ return

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

}

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

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

egrep -i "(q | p) =" |#use Iba záznamy, ktoré majú pravdepodobne vyhľadávacie dotazy sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do niektoré zmeny formátovania a čo je najdôležitejšie meniť všetky medzeryalebo zdôrazňuje, že k + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i "$ Title2" #search pre Title2

OSZ;

Boli tieto informácie užitočné Áno | Nie | potrebujem pomoc
?

if( $ title = "!"){

print "hľadanie" 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 ako $ SDATA){ $ logparts = explode( "", $ SDATA) $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], $ stretnutia);$ 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 vyhľadávania na webeif( ($ ip = $ lip) ||( $ ss = $ LSS)!){ $ peru = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array, "sortbylen ');foreach( $ ssdata ako $ key = & gt; $ value){ $ Sarr = explode( "|", $ value);foreach( $ Sarr, ako $ y){ if( strlen( $ y) & gt; 0) $ s2 [$ y] ++;} Arsort( $ s2);foreach( $ s2 ako $ klíčem2 = & gt; $ hodnota2){ $ urldata [$ key] [$ i] = "$ val2: $ key2
.";$ STOT [$ key] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata ako $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata dolárov týždenne){ print "
" $ za týždeň ++ "WEEK( S) pred: Celkový počet vyhľadávania =" $ STOT [$ url] [$ WK-1] "
.";print "& lt; div onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style = 'šírka: 800px; výška: 100px; border: 1px solid šedá; overflow: scroll '& gt; $ týždeň ";}}}

& gt? ;

Boli tieto informácie užitočné?áno |nie |Potrebujem pomoc

& lt; / OSZ

Úlohy

zoradiť podľa dĺžky dopytu ako sekundárny druhu, s dlhších otázok prvou

to je všetko.Rád by som počul vaše skúsenosti s týmto kódom alebo návrhy na zlepšenie.

Tipy triky & amp;Varovanie

  • Poznámka: Podporujem p = ako aj štandardné q = pretože Yahoo je nepárne kačica je používa p =
  • Version 2 php je zložitejšia a bol som kódovanie rýchlo, takže niektoré z premennýchmená bola vybraná zle.prosím nesťažujte vo forme voľnej kód.Ale ak chcete opraviť a zdokumentovať ho a pridať ju do wiki ako verzia 3, ktorý by fantastické:) zaplatiť dopredu!
  • Ak máte problémy s niektorou z týchto krokov, položiť otázku o ďalšiu pomoc, alebo poštou v sekcii Komentáre nižšie.

Komentáre

VisiHow víta všetky komentáre .Ak nechcete zostať v anonymite, zaregistrovať alebo prihlásiť. Je to zadarmo.




Daniel
Najlepší Autor
69 Články Začať
2,601 článku Upraví
24,290 bodov
Daniel je vybavený autor s VisiHow,Daniel dosiahla úroveň "nadporučík" s 24,290 bodmi.Daniel bol zahájený 69 článkov a robil 2,601 článkoch úpravy.17,578 ľudí čítať príspevky článkoch Danielove.
Spýtajte Daniel
Daniel : Ahoj, volám sa Daniel.
Daniel : Môžem vám s vaším problémom o "ľahko rozobrať / Search Hľadaný reťazce webové stránky sa líši od Apache logov pomocou PHP awk a sed príkazového riadku linux utility"?
Prijmi