14Aug

Lengvai apdoroti / paieškos tinklalapį "paieškos užklausos eilutes Apache rąstų naudojant php awk ir sed Linux" komandinę eilutę komunalinių

6 Dalys: Naudokite Awk ir sed apdoroti Apache failus naudotojo įvestą paieškos užklausas Žinomos problemos Versija 2: Mažiau komandinės eilutės pirminio apdorojimo ir daugiau php perdirbimo ToDo Patarimai gudrybės & amp;Įspėjimai Komentarai

Tai HOWTO parodyti jums, kaip lengvai į Linux komandinės eilutės apdoroti jūsų Apache failus gauti paieškos eilutę užklausą duomenų, kad naudotojai, tipas rasti savo tinklalapį paieškos.Turiu įtraukti php paieškos GUI, taip pat lengvai naudojimas.

Ar tai buvo naudinga?Taip |Nėra |Man reikia pagalbos
Turinys
  • 1 Naudokite AWK ir sed apdoroti Apache failus Viskas įvedėte paieškos užklausą
  • 2 žinomų problemų
  • 3 Versija 2: Mažiau komandinės eilutės pirminio apdorojimo ir daugiau Php apdorojimas
  • 4 ToDo
  • 5 Patarimai gudrybės & amp;Įspėjimai
  • 6 Komentarai
skelbimą

Naudoti awk ir sed apdoroti Apache failus Viskas įvedėte paieškos užklausą

Čia yra žalias kodas gauti darbą.Atkreipkite dėmesį, kad $ Title2 reikėtų pakeisti, ką jūs ieškote, BET erdves pakeičiami "\ +.

Pavyzdžiui: "Kaip rasti didelį Lollypop" būtų "Kaip \ + ir \ + susirasti \ + a \ + didelis \ + Lollypop"

Tai yra, nes aš planuoju skambinti iš php funkcija, kur ašužpildyti $ Title2 kaip pamatysite vėliau.Galėjau įdėti egrep

vėliau, bet tada jūs neturite, kad ieško tiek puslapio pavadinimą ir užklausas parinktį.Mano originali versija tik ieškoma užklausas, bet aš norėjau funkciją galėčiau lengvai paskambinti tam tikrą puslapį ir pamatyti visas užklausas, kad vartotojai įvedėte per pastaruosius keletą savaičių.

katė /var/log/virtualmin/VisiHow.com_access_log |#Get Duomenų prieigos žurnalo egrep "(Q | P) =" |#Use Tik įrašai, kad greičiausiai paieškos užklausos sed 's /% 22 / "/ g; S /% 20 / + / g; S / _ / + / g;" | #Do kai formatavimo pakeitimus ir, svarbiausia pakeisti visus tarpusarba pabrėžia iki + egrep -I "$ Title2" | #search už $ Title2 awk '{print $ 11} "| #extract tik duomenų paiešką sed' s / p = / Q = / IG" | #handle "Yahoo", p = awk -F 'Q =' '{print $ 2} "| #grab visus duomenis prasidedantys q = sed' s / q = // g; s / + / / g; s /% 22 /" / g; s /% 20/ / g; "|#reformat žmogaus formato cut-d "& amp;"-f 1 |#strip išjungti kiti parametrai AWK '{print $ 0 "
"} "#add
nuorodą pertraukas, nes mes planuojame išėjimo į tinklalapį

tai buvo naudinga?Taip |Nėra |Man reikia pagalbos

== Kurkime PHP

HTML GUI įvynioti už tai dabar ==

norite, kad šis lengvai naudojimas norime prieiti prie vartotojo užklausos duomenis iš interneto puslapio paieškos formą.

queries.php

& lt; title & gt; vartotojų užklausas & lt; / title & gt;& Lt; meta name = "robotai" content = "Neindeksavimo" & gt;

& lt; formos pavadinimas = "sform" metodas = "gauti" & gt;Paieškos pavadinimas: & lt; įėjimo dydis = "80" Value = "? & Lt; Php echo $ _GET [ 'pavadinimas']; & gt;?"NAME = "title" type = "text" & gt;& Lt; įvesties vertė = "Ieškoti" type = "submit" & gt;Užuomina: Jūs galite naudoti dalinį pavadinimą ar net REGEX kaip & lt; / forma & gt; "Samsung * žalą."

Ar tai buvo naudinga?Taip |Nėra |Man reikia pagalbos

$ pavadinimas = $ _GET [ 'pavadinimas'];$ Pavadinimas = preg_replace( "/ kaip / i", "", $ pavadinimas);$ Title2 = str_replace( "", "\ +, $ pavadinimas);$ Title2 = str_replace( "_", "\ +, $ Title2);

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

egrep -i "(Q | p) =" |#Use Tik įrašai, kad greičiausiai paieškos užklausos sed 's /% 22 / "/ g; S /% 20 / + / g; S / _ / + / g;" | #Do kai formatavimo pakeitimus ir, svarbiausia pakeisti visus tarpusarba pabrėžia iki + egrep -i "$ Title2" | #search už Title2 awk '{print $ 11} "| #extract tik duomenų paiešką sed' s / p = / Q = / IG" | #handle Yahoo p = awk -F"Q = ''{ print $ 2}" | #grab visus duomenis prasidedantys q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; "|#reformat žmogaus formato cut-d "& amp;"-f 1 |#strip išjungti kiti parametrai AWK '{print $ 0 "
"} "#add
nuorodą pertraukas, nes mes planuojame išėjimo į tinklalapį

EOF;

Ar tai buvo naudinga?Taip |Nėra |Man reikia pagalbos

jei "{

Spausdinti Ieškant" $ pavadinimu "..."( $ pavadinimas = "!)";print "einamosios savaitės. ..
";Spausdinti `katė /var/log/virtualmin/visihow.com_access_log |#Get Duomenų prieigos žurnalo $ bigcmd ";// Mes palaikome p = per daug, nes "Yahoo" naudoja, kad. .. keista ančių Lol už( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i savaites( -ę) AGO
";spausdinti `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Duomenų prieigos žurnalo $ bigcmd ";}

} & gt?;

Ar tai buvo naudinga?Taip |Nėra |Man reikia pagalbos

& lt; / eof

žinomų problemų

grep yra įlaipinami įrašus su persiuntimo duomenis, todėl grįžta nepageidaujamų įrašų.Pavyzdžiui, jei kas nors ieško "iPhone" ir vartotojas buvo ant iPhone puslapyje tada paspausti eiti į Samsung puslapyje, šis kodas susitvarko iPhone nuo persiuntimo ir taip pat, kad duomenis, kuriuos ji neturėtų.Aš dirbu 2 versija, kad daro daug daugiau ir ištaisyti šią klaidą juda daug komandų eilutės pirminio apdorojimo į PHP.Kodas bus bukas, bet duos kur kas daugiau naudingų ir tikslius duomenis.

Ar tai buvo naudinga?Taip |Nėra |Man reikia pagalbos

Versija 2: Mažiau komandinės eilutės pirminio apdorojimo ir daugiau Php apdorojimas

Ši versija turi šiuos privalumus / trūkumus:

  • Mažiau komandinės eilutės pirminio apdorojimo reiškia ilgiau kodas
  • Daugiau Php reiškia daugiau kontrolės ir ypatybės
  • Ignoruoja kelis pasikartojančius prašymus tuo pačiu IP
  • skaičiuoja kelis paieškas vietoj sąrašą jiems kelis kartus
  • Rodyti Tendencijos informacijos rodydami savaitės sumas
  • produkcija yraSlenkamoji div us lengvai peržiūrėti populiarių puslapių
  • Sutvarkyti pagal pavadinimą ilgio sudarė, kurių maždaug reiškia daugiau populiarių puslapių rodo pirmąjį
  • šiek tiek greitai ir purvinas javascript & amp;CSS padaryti DIV-ų Auto Expand išsami peržiūrėti

& lt; title & gt; vartotojų užklausas & lt; / title & gt;& Lt; meta name = "robotai" content = "Neindeksavimo" & gt;

& lt; formos pavadinimas = "sform" metodas = "gauti" & gt;Paieškos pavadinimas: & lt; įėjimo dydis = "80" Value = "& lt; Php
jei( strlen( $ _ GET [ 'pavadinimas']) & gt; 0){
echo $ _GET [ 'pavadinimas'];
} else{
aido "*"; & lt; br = "" type = "text" & gt;} & gt;? "NAME = "vardas" / & gt;& Lt; įvesties vertė = "Ieškoti" type = "submit" & gt;
Užuomina: įveskite * viską pamatyti.Jūs galite naudoti dalinį pavadinimą ar net REGEX kaip "Samsung" * žalą. "& Lt; / forma & gt;

Ar tai buvo naudinga?Taip |Nėra |Man reikia pagalbos

funkcija sortbylen( $ a, $ b){

grąža strlen( $ B) -strlen( $ a);

}

$ pavadinimas = $ _GET [ 'pavadinimas'];$ Pavadinimas = preg_replace( "/ kaip / i", "", $ pavadinimas);$ Title2 = str_replace( "", "\ +, $ pavadinimas);$ Title2 = str_replace( "_", "\ +, $ Title2);

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

egrep -i "(Q | p) =" |#Use Tik įrašai, kad greičiausiai paieškos užklausos sed 's /% 22 / "/ g; S /% 20 / + / g; S / _ / + / g;" | #Do kai formatavimo pakeitimus ir, svarbiausia pakeisti visus tarpusarba pabrėžia, kad + awk "{print $ 1" "$ 7 colių" $ 11} "| egrep -i" $ Title2 "#search už Title2

EOF;

tai buvo naudinga Taip | Ne | man reikia pagalbos
?

jei( $ pavadinimas = "!"){

spausdinimo "Ieškant" $ pavadinimu "...", nes( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `katė /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = sprogti( "\ n", $ searchlogdata); foreach( $ searchlogarray kaip $ sData){ $ logparts = sprogti( "", $ sData); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], $ atitinka);$ Ss = urldecode( $ atitikmenų [2]);$ Ss = str_replace( "+", "", $ ss);jei( (strlen( apdaila( $ ss)) & gt; 3) & amp; & amp;( preg_match( "#" http \: \ / \ / # i ", $ ss))!){ // išlaikyti iš url iš svetainės paieškasjei( ($ ip = $ lūpų) ||( $ ss = $ LMS)!){ $ lūpų = $ IP;$ LMS = $ SS;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ masyvas, "sortbylen ');foreach( $ ssdata kaip $ key = & gt; $ vertė){ $ Sarr = sprogti( "|", $ vertė);foreach( $ Sarr kaip $ -os){ if( strlen( $ S) & gt; 0) $ S2 [$ S] ++;} Arsort( $ S2);foreach( $ S2 kaip $ key2 = & gt; $ VAL2){ $ urldata [$ raktas] [$ i] = "$ VAL2: $ key2
.";$ STOT [$ raktas] [$ i] + = $ VAL2;} Išjungimo( $ S2);} Išjungimo( $ ssdata);} Foreach( $ urldata kaip $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Sav = 0;... Foreach( $ weekdata kaip $ savaitę){ print "
" $ WK ++ "SAVAITĖ( -AI) PRIEŠ: Iš viso paieškos =" $ STOT [$ url] [$ WK-1] "
.";Spausdinti "& lt; div onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style =" width: 800px; height: 100px; sienos: 1px solid pilka; perpildymo: slinkite '& gt; $ savaitę ";}}}

& gt?;

Ar tai buvo naudinga?Taip |Nėra |Man reikia pagalbos

& lt; / eof

ToDo

Rūšiuoti pagal užklausos ilgio kaip antrinis rūšiuoti, ilgesni užklausų pirmasis

Štai ir viskas.Aš norėčiau išgirsti jūsų patirtį su šiuo kodu ar pasiūlymus dėl tobulinimo.

Patarimai gudrybės & amp;Įspėjimai

  • Pastaba: Pritariu, p =, taip pat ir standartinis Q = nes "Yahoo" yra nelyginis antis tai naudoja p =
  • Versija 2 Php yra sudėtingesnė ir buvau kodavimo greitai, kad kai kurie iš kintamųjųpavadinimai buvo parinkti netinkamai.Prašome nesiskundžia kaip laisvos kodą.Bet jei norite pataisyti ir dokumentuoti ją ir įtraukti ją į wiki kaip 3 versija, kad būtų fantastiška:) sumokėti PIRMYN!
  • Jei turite problemų su bet kuriuo iš šių etapų, užduoti klausimą reikia daugiau pagalbos, arba rašyti į komentarus skyriuje žemiau.

Komentarai

VisiHow sveikina Visi komentarai .Jei nenorite būti anonimiška, registrą arba Prisijungti. Ji yra nemokama.




Danielis
Teminiai Autorius
69 straipsniai pradžia
2,601 straipsnis redaguoja
24,290 Taškai
Danielis yra matomas autorius su VisiHow,Danielis pasiekė "leitenantas" lygio su 24,290 taškų.Danielis pradėjo 69 straipsnius ir padarė 2,601 artikulų pakeitimų.17,578 žmonės skaityti Danieliaus straipsnį sumokėtas įmokas.
Užduoti Danielis
Daniel : Sveiki, mano vardas yra Daniel.
Danielis : aš galiu padėti jums su jūsų problema apie "Lengvai apdoroti / paieškos tinklalapį" paieškos užklausos eilutes Apache rąstų naudojant php awk ir sed Linux "komandinę eilutę komunalinės paslaugos"?
Accept