14Aug
Tas HowTo jums parādīs, cik viegli pie Linux komandrindas izanalizēt savu Apache log failus, lai iegūtu meklēšanas string vaicājumu datus, kas lietotājiem veidu, lai atrastu jūsu mājas lapā meklētājprogrammu.Man ir iekļautas php meklēšanas GUI, kā arī par vieglu izmantošanu.
- 1 izmantošana AWK un sed parsēt Apache log failus lietotājam drukāti meklēšanas vaicājumu
- 2 Zināms Problēmas
- 3 Version 2: Mazāk komandrindas preprocessing un vairāk php apstrāde
- 4 ToDo
- 5 Tips triki & amp;Brīdinājumi
- 6 Komentāri
Lietot AWK un sed parsēt Apache log failus lietotājam drukāti meklēšanas vaicājumu
Šeit ir izejvielas kods, lai saņemtu darīts darbs.Ņemiet vērā, ka $ TITLE2 būtu jāaizstāj ar to, ko jūs meklējat, BET telpas aizstāj ar "\ +".
Piemēram: "Kā atrast lielu lollypop" būtu "Kā \ + līdz \ + atrast \ + A \ + liels \ + lollypop"
Tas ir tāpēc, ka es plānoju zvanīt no php funkcija, kur es gribuaizpildīt $ TITLE2 kā jūs redzēsiet vēlāk.Es varētu būt likt egrep
vēlāk, bet tad jums nebūs iespēja meklēt gan lapas nosaukumu un vaicājumiem.Mana sākotnējā versija tikai meklēja vaicājumiem, bet es gribēju funkciju es varētu ērti piezvanīt konkrētā lapu un redzēt uz visiem jautājumiem, kas lietotājiem ir drukāti pēdējo nedēļu laikā. kaķis /var/log/virtualmin/VisiHow.com_access_log |#Get Dati no piekļuves log egrep "(q | p) =" |#use Tikai ierakstus, kas, visticamāk, ir meklēšanas vaicājumiem sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;" | #Do dažas formatēšanas izmaiņas un vissvarīgāk mainīt visas telpasvai uzsver to + egrep -Es "$ TITLE2" | #search par $ TITLE2 AWK "{print $ 11} '| #extract dati tikai tad sed' s / p = / q = / ig '| #handle Yahoo p = AWK -F 'q =' '{print $ 2}' | #grab visus datus, sākot ar Q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; "|#reformat cilvēka lasāmā formātā cut -D "& amp;"-f 1 |#strip off citi parametri AWK "{print $ 0"
"}" #add
saite pārtraukumus, jo mēs plānojam izejas uz tīmekļa lapu
== Pieņemsim izveidot PHP
HTML GUI iesaiņojuma šo tagad ==Lai padarītu šo viegli lietojumu mēs vēlamies, lai piekļūtu lietotāja vaicājuma datus no mājas lapas meklēšanas formā.
queries.php
& lt; title & gt; lietotāju vaicājumiem & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; forma name = "sform" method = "get" & gt;Meklēt Title: & lt; input size = "80" vērtība = "? & Lt; php echo $ _GET [ 'nosaukums']; & gt;?"name = "Nosaukums" type = "text" & gt;& Lt; input vērtība = "Meklēt" type = "iesniegt" & gt;Padoms: Jūs varat izmantot daļēju nosaukumu vai pat Regex patīk & lt; / forma & gt; "Samsung * bojājumus."
$ title = $ _GET [ 'nosaukums'];$ Title = preg_replace( "/ kā / i", "", $ nosaukums);$ TITLE2 = str_replace( "", "\ +", $ nosaukums);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; EOF
egrep -i "(Q | p) =" |#use Tikai ierakstus, kas, visticamāk, ir meklēšanas vaicājumiem sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;" | #Do dažas formatēšanas izmaiņas un vissvarīgāk mainīt visas telpasvai uzsver to + egrep -i "$ TITLE2" | #search par TITLE2 AWK '{print $ 11}' | sed #extract dati tikai tad 's / p = / q = / ig' | #handle yahoo p = AWK -F"q = ''{ print $ 2} '| #grab visus datus, sākot ar Q = sed' s / q = // g; s / + / / g; s /% 22 /" / g; s /% 20 // g; "|#reformat cilvēka lasāmā formātā cut -D "& amp;"-f 1 |#strip off citi parametri AWK "{print $ 0""}" #add
saite pārtraukumus, jo mēs plānojam izejas uz lapas
EOF;
ja "{
print Meklē" $ titulu "..."( $ title = "!)";print "kārtējās nedēļas. ..";print `kaķis /var/log/virtualmin/visihow.com_access_log |#Get Dati no piekļuves log $ bigcmd `;// Mēs atbalstām p = pārāk, jo Yahoo izmanto, ka. .. dīvaini pīle lol par( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i NEDĒĻAS( S) atpakaļ
";izdrukāt `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Dati no piekļuves log $ bigcmd `;}
} & gt?;
& lt; / EOF
Zināms Problēmas
grep ir pacelt ierakstus ar atsauču datiem, lai tā atgriežas nevēlamu ierakstus.Piemēram, ja kāds meklē "iPhone" un lietotājs bija par iPhone lapas, tad uzklikšķināt doties uz Samsung lapu, šis kods paceļ iPhone no referrer un tādējādi ietver, ka dati, kas to nevajadzētu darīt.Es strādāju par 2 versiju, kas dara daudz vairāk, un noteikt šo kļūdu, pārvietojot daudz no komandrindas preprocessing uz php.Kodekss būs stulbs, bet sniegs daudz noderīgas un precīzus datus.
Versija 2: Mazāk komandrindas preprocessing un vairāk php apstrāde
Šī versija ir šādas priekšrocības / trūkumi:
- Mazāk komandrindas preprocessing nozīmē vairs koda
- Vairāk php nozīmē lielāku kontroli un funkcijas
- ignorē vairākas dublēt pieprasījumus no vienas IP
- Grāfu vairākus meklēšanu, nevis uzskaitot tos vairākas reizes
- Show trending informāciju, parādot nedēļas kopsummas
- izlaidiritināms divs ērtai interesantas lapas
- Kārtot pēc vaicājuma garuma bija, kas aptuveni nozīmē vairāk populārs lapas parādīt pirmo
- nedaudz ātri un netīrās javascript & amp;css padarīt divs auto paplašināt detalizētai apskatei
& lt; title & gt; lietotāju vaicājumiem & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; forma name = "sform" method = "get" & gt;Meklēt Title: & lt; input size = "80" vērtība = "& lt; php
if( strlen( $ _ GET [ 'nosaukums']) & gt; 0){
echo $ _GET [ 'nosaukums'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "titulu" / & gt;& Lt; input vērtība = "Meklēt" type = "iesniegt" & gt;
Padoms: Ievadiet *, lai redzētu visu.Jūs varat izmantot daļēju nosaukumu vai pat regex, piemēram, "Samsung * bojājumu." & Lt; / forma & gt;
funkcija sortbylen( $ a, $ b){
atgriešanās strlen( $ b) -strlen( $ a);}
$ title = $ _GET [ 'nosaukums'];$ Title = preg_replace( "/ kā / i", "", $ nosaukums);$ TITLE2 = str_replace( "", "\ +", $ nosaukums);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; EOF
egrep -i "(Q | p) =" |#use Tikai ierakstus, kas, visticamāk, ir meklēšanas vaicājumiem sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;" | #Do dažas formatēšanas izmaiņas un vissvarīgāk mainīt visas telpasvai uzsver to + AWK "{drukāt $ 1", "$ 7" "$ 11} '| egrep -i" $ TITLE2 "#search par TITLE2EOF;
if( $ title = "!"){
print "Meklē" $ nosaukumu "...", jo( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `kaķis /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = eksplodēt( "\ n", $ searchlogdata); foreach( $ searchlogarray kā sdata $){ $ logparts = eksplozīvs( "", $ sdata); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( Q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], $ sērkociņi);$ Ss = urldecode( $ spēles [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( apdares( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // turēt ārā url no vietas meklējumiemif( ($ ip = $ lūpu) ||( $ ss = $ LSS)!){ $ lūpu = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ masīvs, 'sortbylen ");foreach( $ ssdata kā $ key = & gt; $ vērtība){ $ Sarr = eksplodēt( "|", $ vērtība);foreach( $ Sarr kā $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 kā $ key2 = & gt; $ val2){ $ urldata [$ key] [$ i] = "$ val2: $ key2".$ STOT [$ key] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata kā $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata kā $ nedēļā){ print "
" $ wk ++ "NEDĒĻA( S) AGO: Kopā meklējumi =" $ STOT [$ url] [$ wk-1] "
".print "& lt; div onMouseOver =" this.style.height = 500 "onMouseOut =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style = 'width: 800px; augstums: 100 pikseļu; robeža: 1px solid pelēka; pārplūde: pārvietojieties "& gt; $ nedēļā";}}}
& gt?;
& lt; / EOF
ToDo
Kārtot pēc vaicājumu garuma kā sekundāru veida, ar garākiem vaicājumus pirmais
tas arī viss.Es labprāt vēlētos dzirdēt jūsu pieredzi ar šo kodu vai ierosinājumus par uzlabojumiem.
Tips triki & amp;Brīdinājumi
- Piezīme: Es atbalstu p = kā arī standartnovirze q = jo Yahoo ir nepāra pīle tas izmanto p =
- Version 2 php ir sarežģītāka, un man bija kodēšanas ātri, lai daži no mainīgajiemnosaukumi tika izvēlēti slikti.lūdzu nesūdzas par savu brīvo kodu.Bet, ja jūs vēlaties, lai noteikt to uz augšu un dokumentē to un pievienojiet to wiki kā 3 versija, kas būtu fantastiski:) maksāt to uz priekšu!
- Ja Jums ir problēmas ar kādu no šiem soļiem, uzdot jautājumu plašāku palīdzību, vai ievietot komentāru sadaļā zemāk.
Komentāri
| Daniel Featured Autors 69. pants Started 24,290 punkti 2,601 pantu labojumus |
Daniels ir Featured autors ar VisiHow.Daniel ir sasniegusi līmeni, "Leitnants" ar 24,290 punktiem.Daniel ir sākusi 69 rakstus un izgatavoti 2,601 rakstu labojumus.17,578 cilvēki lasa Daniēla rakstu iemaksas. |
Daniel : | Sveiki, mans vārds ir Daniels. |
Daniel : | Vai es varu jums palīdzēt ar savu problēmu par "Viegli apstrādāt / meklēt tīmekļa vietni meklēšanas vaicājumu virknes no apache baļķiem izmantojot php AWK un sed Linux komandrindas komunālie"? |