14Aug
Dieses HowTo zeigen Ihnen, wie leicht an der Linux-Befehlszeile zu analysieren Ihre Apache-Log-Dateien zu suchen Zeichenfolge Abfragedaten erhalten die Benutzer geben Sie Ihre Webseite in einer Suchmaschine zu finden.Ich habe eine PHP-Suche GUI als auch für die einfache Nutzung enthalten.
- 1 Verwenden awk und sed zu analysieren Apache-Log-Dateien für Benutzer eingegeben Suchanfragen
- 2 Bekannte Probleme
- 3 helfen Version 2: Weniger Befehlszeile Vorverarbeitung und mehr pHP-Verarbeitung
- 4 ToDo
- 5 Tipps Tricks & amp;Warnungen
- 6 Kommentare
Verwenden awk und sed Apache-Log-Dateien für Benutzer eingegeben Suche analysieren abfragt
ist die roh-Code die Arbeit zu erledigen.Beachten Sie, dass $ title2 durch sein ersetzen sollten, was Sie suchen, aber Leerzeichen ersetzt werden mit "\ +".
Zum Beispiel: "Wie eine große Lollypop zu finden" wäre: "Wie \ + + zu \ finden \ + a \ + big \ + Lollypop"
Das ist, weil ich aus einer PHP-Funktion aufrufen möchten, wo ich willbesiedeln $ title2 wie Sie später sehen werden.Ich hätte die egrep
später setzen, aber dann werden Sie nicht die Möglichkeit haben, sowohl Seitentitel und Abfragen zu suchen.Meine ursprüngliche Version gesucht nur Anfragen, aber ich wollte eine Funktion, die ich einfach für eine bestimmte Seite aufrufen und sehen konnte, alle Abfragen, die Benutzer in den letzten paar Wochen eingegeben haben. Katze /var/log/virtualmin/VisiHow.com_access_log |#GET Daten aus dem Zugriffsprotokoll egrep "(q | p) =" |#use Nur Datensätze, die wahrscheinlich von Suchanfragen sed haben 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | einige Formatierungsänderungen #Do und vor allem alle Räume ändernoder unterstreicht auf + egrep -I "$ title2" | #search für title2 awk $ '{print $ 11}' | #extract nur Suchdaten sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab alle Daten, beginnend mit q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat zu Menschen lesbaren Format cut -d "& amp;"-f 1 |#strip aus anderen Parametern awk '{$ 0 "
" print}' #add
Link bricht, weil wir für die Ausgabe auf einer Webseite
helfen == Lassen Sie uns dafür jetzt eine PHP
HTML GUI-Wrapper erstellen ==Um diese leicht Nutzung wir die Benutzerabfrage Daten von einer Webseite ein Suchformular aufrufen möchten zu machen.
queries.php
& lt; title & gt; Benutzerabfragen & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; form name = "sform" method = "get" & gt;Suche Titel: & lt; Eingabe size = "80" value = "? & Lt; & gt;; php $ _GET [ 'title'] echo"name = "title" type = "text" & gt;& Lt; Eingabewert = "Suchen" type = "submit" & gt;TIPP: Sie können einen Teil des Titels verwenden oder sogar regex wie & lt; / form & gt; "Samsung * Schaden."
$ title = $ _GET [ 'title'] helfen;$ Title = preg_replace( "/, wie man / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);
$ bigcmd = & lt; & lt; & lt; eof
egrep -i "(q | p) =" |#use Nur Datensätze, die wahrscheinlich von Suchanfragen sed haben 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | einige Formatierungsänderungen #Do und vor allem alle Räume ändernoder unterstreicht auf + egrep -i "$ title2" | #search für title2 awk '{print $ 11}' | #extract nur Suchdaten sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab alle Daten, beginnend mit q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat zu Menschen lesbaren Format cut -d "& amp;"-f 1 |#strip aus anderen Parametern awk '{$ 0 "" print}' #add
Link bricht, weil wir
EOF auf eine Webseite zur Ausgabe planen;
wenn "{
drucken Die Suche nach" $ Titel "..." helfen( $ title = "!)";print "Diese Woche. ..";Druck `cat /var/log/virtualmin/visihow.com_access_log |#GET Daten aus dem Zugriffsprotokoll $ bigcmd `;// Wir unterstützen p = auch, weil Yahoo verwendet, dass. .. ungerade Ente lol for( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i Woche( n) AGO
";drucken `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#GET Daten aus dem Zugriffsprotokoll $ bigcmd `;}}
& gt;
& lt helfen; / EOF
Bekannte Probleme
Die grep Aufnehmen wird Datensätze mit Referrer-Daten, so dass es unerwünschte Datensätze zurückkehrt.Zum Beispiel, wenn jemand für "iPhone" sucht und ein Benutzer war auf einem iPhone Seite dann zu einem Samsung-Seite zu gelangen geklickt haben, dieser Code das iPhone aus dem Referrer aufnimmt und enthält somit, dass die Daten, die es nicht sollte.Ich arbeite an der Version 2, das viel mehr tut und wird diesen Fehler beheben, indem ein großer Teil der Befehlszeile Vorverarbeitung in PHP zu bewegen.Der Code wird mehr stumpf, aber viel nützlicher und genaue Daten geben.
Version 2 helfen: Weniger Befehlszeile Vorverarbeitung und mehr PHP-Verarbeitung
Diese Version bietet folgende Vorteile / Nachteile:
- Weniger Befehlszeile Vorverarbeitungseinrichtung mehr Code
- mehr pHP bedeutet mehr Kontrolle und verfügt über
- Ignoriert mehrere doppelte Anfragen von der gleichen IP
- mehrere Suchen Zählt statt sie mehrmals Listing
- anzeigen Informationen Trending durch Errechnung Anzeige
- Ausgang istin scrollbaren div-Tags für die einfache Anzeige von populären Seiten
- Reihenfolge Abfrage Längen betrugen, was in etwa bedeutet populärer Seiten zeigen
- Eine erste kleine quick and dirty Javascript & amp;CSS machen das Auto divs für detaillierte
& lt Betrachtung erweitern; title & gt; Benutzerabfragen & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; form name = "sform" method = "get" & gt;Suche Titel:? & Lt; Eingabe size = "80" value = "& lt; php
if( strlen( $ _ GET [ 'title']) & gt; 0){
echo $ _GET [ 'title'];
} else{
Echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; Eingabewert = "Suchen" type = "submit" & gt;
TIPP: Geben Sie *, um alles zu sehen.Sie können einen Teil des Titels verwenden oder sogar wie regex "Samsung * Schaden." & Lt; / form & gt;
Funktion sortbylen( $ a, $ b){
Rückkehr strlen( $ b) -strlen( $ a) helfen;}
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/, wie man / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);
$ bigcmd = & lt; & lt; & lt; eof
egrep -i "(q | p) =" |#use Nur Datensätze, die wahrscheinlich von Suchanfragen sed haben 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | einige Formatierungsänderungen #Do und vor allem alle Räume ändernoder unterstreicht auf + awk '{$ 1 "" $ 7 "" 11 $ drucken}' | egrep -i "$ title2" #search für title2EOF;
if( $ title = "!"){
print "Suche nach" $ Titel "..."; 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 wie $ sdata){ = $ logparts explode( "", $ sdata); ip $ = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", Streichhölzer $ logparts [2], $);$ Ss = urldecode( $ treffer [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // draußen bleiben URL aus der Standortsucheif( ($ ip = $ Lippe) ||( $ ss = $ LSS)!){ $ Lippe = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata wie $ key = & gt; $ value){ $ sarr = explode( "|", $ value);foreach( $ sarr als $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 wie $ key2 = & gt; $ val2){ $ urldata [$ key] [$ i] = "$ val2: $ key2";.$ Stot [$ key] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata wie $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata wie $ Woche){ print "
" $ wk ++ "WOCHE( S) AGO: Gesamt Suchen =" $ 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; height: 100px; border: 1px solid gray; Überlauf: blättern '& gt; $ Woche ";}}}
& gt;
& lt helfen; / EOF
ToDo
Sortieren nach Abfragelänge als sekundärer Art, mit mehr Anfragen ersten
Das ist es.Ich würde gerne Ihre Erfahrungen mit diesem Code oder Verbesserungsvorschläge zu hören.
Tipps Tricks & amp;Warnungen
- Hinweis: Ich unterstütze p = auch und die Standard-q = weil Yahoo ist die ungerade Ente ist es verwendet p =
- Version 2 php komplexer ist und ich war Codierung schnell, so einige der VariablenNamen waren schlecht gewählt.bitte beschweren Sie nicht als seinen freien Code.Aber wenn Sie wollen, dass es in Ordnung zu bringen und zu dokumentieren, und fügen Sie sie in das Wiki als Version 3 das wäre fantastisch nach vorne:) BEZAHLEN!
- Wenn Sie Probleme mit einem dieser Schritte haben, eine Frage stellen, um weitere Hilfe, oder per Post in den Kommentaren Abschnitt weiter unten.
Kommentare
| Daniel Hervorgehoben Autor 69 Artikel Gestartet 2601 Artikel Edits 24.290 Punkte |
Daniel ist ein gefragter Autor mit VisiHow.Daniel hat das Niveau der "Lieutenant" mit 24.290 Punkten erreicht.Daniel hat 69 Artikel gestartet und machte 2601 Artikel Bearbeitungen.17.578 Menschen haben Daniels Artikel Beiträge lesen. |
Daniel : | Hallo, mein Name ist Daniel. |
Daniel : | Kann ich Ihnen helfen, mit Ihrem Problem über "leicht analysieren / Suche einer Webseite suchen Abfrage-Strings von Apache-Logs php awk und sed Linux-Kommandozeilen-Utilities"? |