14Aug
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.
- 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
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į
== 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ą."
$ 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;
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?;
& 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.
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;
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ž Title2EOF;
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?;
& 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
| 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. |
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"? |