14Aug
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.
- 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
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
== 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."
$ 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;
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? ;
& 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.
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;
( $ 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 Title2OSZ;
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? ;
& 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
| 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. |
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"? |