14Aug

Helposti jäsentää / Web-sivun etsiminen haku kyselymerkkijonot Apache lokit PHP awk ja sed komentojonoille apuohjelmia

6 Osat: Käytä awk ja sed jäsentää Apache lokitiedostot käyttäjä kirjoittaa hakukyselyistä kokeiluvaiheessa Versio 2: Vähemmän komentorivin esikäsittely ja enemmän php käsittely ToDo Tips Tricks & amp;Varoitukset Kommentit

Tämä ohje näyttää, miten helposti tällä komentojonoille jäsentää Apache lokitiedostot saada hakusanan kyselyn tiedot, jotka käyttäjä kirjoittaa löytää verkkosivun hakukoneen.Olen sisällyttänyt php haku GUI sekä helpottaa käyttöä.

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua
Sisältö
  • 1 Käytä awk ja sed jäsentää Apache lokitiedostot käyttäjä kirjoittaa hakulausekkeilla
  • 2 Tunnetut ongelmat
  • 3 Versio 2: Vähemmän komentorivin esikäsittely ja php käsittely
  • 4 Tehtävät
  • 5 Tips vihjeitä & amp;Varoitukset
  • 6 Kommentit
Ad

Käytä awk ja sed jäsentää Apache lokitiedostot käyttäjä kirjoittaa hakulausekkeilla

Tässä on raaka koodi hommansa.Huomaa, että $ Title2 pitäisi korvata mitä etsit MUTTA tilat korvataan "\ +".

Esimerkiksi: "Kuinka löytää iso lollypop" olisi "Miten \ + on \ + löytää \ + a \ + iso \ + lollypop"

Tämä johtuu aion soittaa php-toiminto, jossa aionasuttaa $ Title2 kuten näet myöhemmin.Olen voinut siirtyä egrep

myöhemmin, mutta sinun ei ole mahdollisuutta etsiä sekä sivun otsikko ja kyselyitä.Alkuperäisenä versio juuri etsinyt kyselyitä mutta halusin funktion voisin kutsua tietylle sivulle ja nähdä kaikki kyselyt, jotka käyttäjät ovat kirjoitetut viime viikkoina.

kissa /var/log/virtualmin/VisiHow.com_access_log |#Get Tietoja käyttöoikeuslokiin egrep "(q | p) =" |#use Vain tietueet, jotka todennäköisesti ovat hakulausekkeilla sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;" | #Do joitakin muotoilumuutokset ja mikä tärkeintä muuttaa kaikkia tilojatai korostaa to + egrep -I "$ Title2" | #search for $ Title2 awk '{print $ 11}' | #extract vain hakutietoja sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}:' | #grab kaikki tiedot alkavat q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; "|#reformat ihmisen luettavaan muotoon cut -d "& amp;"-f 1 |#strip pois muut parametrit Awk '{print $ 0 "
"} "#add
linkki taukoja koska aiomme lähtö verkkosivun

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua

== Oletetaan luoda PHP

HTML GUI kääre tämä nyt ==

Jotta tämä helposti käyttö halutaan käyttää käyttäjän kyselyn tiedot web-sivulta hakulomaketta.

queries.php

& lt; title & gt; Käyttäjän kyselyt & lt; / title & gt;& Lt; meta name = "robotteja" content = "noindex" & gt;

& lt; muotoa nimi = "sform" method = "GET" & gt;Haku Otsikko: & lt; input size = "80" value = "& lt;? Php echo $ _GET [ 'otsikko'];? & Gt;"name = "title" type = "text" & gt;& Lt; input value = "Hae" type = "lähetä" & gt;VINKKI: Voit käyttää osittaisia ​​otsikko tai jopa regex kuten "Samsung. * Vahinko" & lt; / form & gt;

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua

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

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

egrep -i "(q | p) =" |#use Vain tietueet, jotka todennäköisesti ovat hakulausekkeilla sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;" | #Do joitakin muotoilumuutokset ja mikä tärkeintä muuttaa kaikkia tilojatai korostaa to + egrep -i '$ Title2 "| #search for Title2 awk'{ print $ 11} '| #extract vain hakutietoja sed' s / p = / q = / ig '| #handle yahoo p = awk -F'q =' '{print $ 2}:' | #grab kaikki tiedot alkavat q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat ihmisen luettavaan muotoon cut -d "& amp;"-f 1 |#strip pois muut parametrit Awk '{print $ 0 "
"} "#add
linkki taukoja koska aiomme lähtö verkkosivun

EOF;

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua

jos( $ title! = ""){

print "etsiminen" $ otsikko "...";print "kuluvaan viikkoon. ..
";print `kissa /var/log/virtualmin/visihow.com_access_log |#Get Tietoja käyttöoikeuslokiin $ bigcmd `;// Tuemme p = liian koska Yahoo käyttää tätä. .. outoa ankka lol varten( $ i = 1, $ i & lt; 6; $ i ++){ print "
$ i viikko( a) AGO
";tulostaa `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Tietoja käyttöoikeuslokiin $ bigcmd `;}

}? & Gt;

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua

& lt; / eof

kokeiluvaiheessa

Etsinnän on poimien tietueiden viitetiedot joten on palaamassa toivottuja kirjaa.Esimerkiksi jos joku hakee "iPhone" ja käyttäjä oli iPhone sivulla napsautetaan mennä Samsung sivun, tämä koodi poimii iPhone viittaavan ja sisältää siten että tietoja, joita sen ei pitäisi.Olen työskennellyt versio 2, joka tekee paljon enemmän ja korjaa tämän vian siirtämällä paljon komentorivin esikäsittely osaksi php.Koodi on enemmän tylppä, mutta antaa paljon hyödyllistä ja tarkkaa tietoa.

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua

Versio 2: Vähemmän komentorivin esikäsittely ja enemmän php käsittely

Tässä versiossa on seuraavat hyödyt / haitat:

  • Vähemmän komentorivin esikäsittelyvälineet enää koodi
  • lisää php tarkoittaa enemmän ohjaus ja tarjolla
  • huomioi useita päällekkäisiä pyyntöjä samasta ip
  • Counts useita hakuja sijaan luettelemalla useita kertoja
  • Näytä nousussa tietoja näyttämällä viikoittain yhteensä
  • lähtö onvieritettävä divs helppo katsella suosittuja sivuja
  • Lajittele kyselyn pituudet olivat, josta noin merkitsee suositumpi sivuja näyttää ensin
  • hieman nopea ja likainen javascript & amp;css tehdä divs auto laajentaa yksityiskohtaisempaan tarkasteluun

& lt; title & gt; Käyttäjän kyselyt & lt; / title & gt;& Lt; meta name = "robotteja" content = "noindex" & gt;

& lt; muotoa nimi = "sform" method = "GET" & gt;Haku Otsikko: & lt; input size = "80" value = "& lt;? Php
jos( strlen( $ _ GET [ 'otsikko']) & gt; 0){
echo $ _GET [ 'otsikko'];
} else{
echo "*" & lt; br = "" type = "text" & gt;}? & gt; "name = "title" / & gt;& Lt; input value = "Hae" type = "lähetä" & gt;
VINKKI: Anna * nähdä kaiken.Voit käyttää osittaisia ​​otsikko tai jopa regex kuten "Samsung. * Vahinko" & lt; / form & gt;

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua

toiminto sortbylen( $ a, $ b){

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

}

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

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

egrep -i "(q | p) =" |#use Vain tietueet, jotka todennäköisesti ovat hakulausekkeilla sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;" | #Do joitakin muotoilumuutokset ja mikä tärkeintä muuttaa kaikkia tilojatai korostaa to + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i '$ Title2 "#search for Title2

EOF;

Oliko tästä hyötyä? Kyllä | Ei | tarvitsen apua

jos( $ title! = ""){

print "etsiminen" $ otsikko "..." for( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `kissa /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = räjähtää( "\ n", $ searchlogdata); foreach( $ searchlogarray kuin $ sdata){ $ logparts = räjähtää( "", $ sdata); $ ip = $ logparts [0]; $ url = $ logparts[1], preg_match( "/( q | p) =( . *?)"?( \ & amp; | $) / ", $ logparts [2], $ ottelut);$ Ss = urldecode( $ ottelut [2]);$ Ss = str_replace( "+", "", $ ss);jos( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( ! preg_match( "# http \: \ / \ / # i", $ ss))){ // pitää pois url maasta sivustohakujenjos( ($ ip! = $ huuli) ||( $ ss! = $ LSS)){ $ huuli = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"]. = "$ Ss |";}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata kuin $ avain = & gt; $ arvo){ $ Sarr = räjähtää( "|", $ arvo);foreach( $ Sarr kuin $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 kuin $ key2 = & gt; $ Val2){ $ urldata [$ avain] [$ i]. = "$ Val2: $ key2
";$ STOT [$ avain] [$ i] + = $ Val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata kuin $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;foreach( $ weekdata kuin $ viikossa){ print "
". $ wk ++. "WEEK( S) AGO: Total haut =". $ 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; korkeus: 100px; border: 1px solid harmaa, ylivuoto: selaa '& gt; $ viikossa ";}}

}? & Gt;

Oliko tästä hyötyä?Kyllä |ei |Tarvitsen apua

& lt; / eof

ToDo

Lajittelu kyselyn pituus toissijaisena lajitella, jossa pidempi kyselyt ensimmäisen

Siinä kaikki.Haluaisin kuulla kokemuksia tästä koodin parannusehdotuksistasi.

Tips Tricks & amp;Varoitukset

  • Huomautus: Kannatan p = samoin ja tavallinen q = koska Yahoo on outoa ankka on käyttää p =
  • Versio 2 php on monimutkaisempi ja olin koodaus nopeasti, joten jotkut muuttujistanimet valittiin huonosti.älä valittaa vapaana koodia.Mutta jos haluat korjata sen ylös ja dokumentoida sen ja lisätä sen osaksi wiki kuin versio 3, joka olisi loistava:) Pay It Forward!
  • Jos sinulla on ongelmia mitään näistä vaiheista, kysyä lisää apua, tai postittaa kommentit osiosta.

Kommentit

VisiHow tyytyväinen kaikki kommentit .Jos et halua olla anonyymi, rekisteröidä tai kirjaudu sisään. Se on ilmainen.




Daniel
Featured Author
69 artiklan alkoi
2601 artiklan muokkaukset
24290 Pisteet
Daniel on esillä kirjailija VisiHow.Daniel on saavuttanut tason "luutnantti" ja 24290 pistettä.Daniel on alkanut 69 artikkeleita ja tehty 2601 artikkeli muokkauksia.17578 ihmiset lukenut Danielin artikkeli maksuja.
Pyydä Daniel
Daniel : Hei, nimeni on Daniel.
Daniel : Voinko auttaa ongelmasi kanssa noin "Helposti jäsentää / etsiä verkkosivun haku kyselymerkkijonot Apache lokit PHP awk ja sed komentojonoille apuohjelmia"?
Hyväksy