14Aug
HowTo ini akan menunjukkan cara untuk dengan mudah di baris perintah Linux mengurai file log apache Anda untuk mendapatkan data permintaan pencarian string yang pengguna mengetik untuk menemukan halaman web Anda di mesin pencari.Saya telah menyertakan GUI pencarian php juga untuk memudahkan penggunaan.
- 1 Gunakan awk dan sed untuk mengurai file log apache bagi pengguna mengetik permintaan pencarian
- 2 Disebut Masalah
- 3 Versi 2: Kurang baris perintah preprocessing dan lebih pengolahan php
- 4 ToDo
- 5 Tips Trik & amp;Peringatan
- 6 Komentar
Gunakan awk dan sed untuk mengurai file log apache bagi pengguna mengetik permintaan pencarian
Berikut adalah kode baku untuk mendapatkan pekerjaan yang dilakukan.Perhatikan bahwa $ title2 harus mengganti dengan apa yang Anda cari TAPI ruang diganti dengan "\ +".
Misalnya: "Bagaimana menemukan lollypop besar" akan "Bagaimana \ + untuk \ + menemukan \ + a \ + \ besar + lollypop"
Ini karena saya berencana untuk memanggil dari fungsi php, di mana saya akanmengisi $ title2 karena Anda akan lihat nanti.Saya bisa menempatkan
egrep nanti tapi kemudian Anda tidak akan memiliki pilihan untuk mencari kedua judul halaman dan permintaan.Versi asli saya hanya mencari query tapi aku ingin fungsi aku bisa dengan mudah meminta halaman tertentu dan melihat semua permintaan yang pengguna telah diketik selama beberapa minggu terakhir. cat /var/log/virtualmin/VisiHow.com_access_log |Data #Get dari akses log egrep "(q | p) =" |#use Hanya catatan yang mungkin memiliki permintaan pencarian sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do beberapa perubahan format dan yang paling penting mengubah semua ruangatau menggarisbawahi untuk + egrep -I "$ title2" | #search sebesar $ title2 awk '{print $ 11}' | #extract hanya pencarian data sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab semua data dimulai dengan q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat ke manusia format yang dapat dibaca cut -d "& amp;"-f 1 |#strip off parameter lainnya awk '{print $ 0 "
"}' #Add
Link istirahat karena kami berencana untuk output ke halaman web
== Mari kita membuat GUI wrapper PHP
HTML untuk ini sekarang ==Untuk membuat ini mudah penggunaan kita ingin mengakses data permintaan pengguna dari bentuk pencarian halaman web.
queries.php
& lt; title & gt; Pengguna Pertanyaan & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; bentuk nama = metode "sform" = "mendapatkan" & gt;Cari Judul: & lt; masukan size = "80" value = "? & Lt; php echo $ _GET [ 'title']; & gt;?"name = "title" type = "text" & gt;& Lt; nilai input = "Cari" type = "submit" & gt;PETUNJUK: Anda dapat menggunakan judul parsial atau bahkan regex seperti & lt; / bentuk & gt; "Samsung * kerusakan."
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ bagaimana / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);
$ bigcmd = & lt; & lt; & lt; eof
egrep-i "(q | p) =" |#use Hanya catatan yang mungkin memiliki permintaan pencarian sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do beberapa perubahan format dan yang paling penting mengubah semua ruangatau menggarisbawahi untuk + egrep-i "$ title2" | #search untuk title2 awk '{print $ 11}' | #extract hanya pencarian data sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab semua data dimulai dengan q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat ke manusia format yang dapat dibaca cut -d "& amp;"-f 1 |#strip off parameter lainnya awk '{print $ 0 ""}' #Add
Link istirahat karena kami berencana untuk output ke halaman web
EOF;
jika "{
cetak Mencari" $ judul "..."( $ title = "!)";print "MINGGU LANCAR. ..";cetak `cat /var/log/virtualmin/visihow.com_access_log |Data #Get dari akses log $ bigcmd `;// Kami mendukung p = juga karena yahoo menggunakan itu. .. bebek aneh lol for( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i MINGGU( S) Kejagung
";mencetak `/var/log/virtualmin/visihow.com_access_log.$i.gz zcat |Data #Get dari akses log $ bigcmd `;}
} & gt;
& lt; / eof
Disebut Masalah
grep ini mengambil catatan dengan data pengarah sehingga kembali catatan yang tidak diinginkan.Misalnya jika seseorang mencari "iPhone" dan pengguna berada di halaman iPhone kemudian klik untuk pergi ke halaman Samsung, kode ini mengambil iPhone dari pengarah dan dengan demikian termasuk data yang yang seharusnya tidak.Saya bekerja pada versi 2, yang melakukan lebih banyak dan akan memperbaiki bug ini dengan memindahkan banyak preprocessing baris perintah dalam php.Kode akan lebih tumpul, tapi akan memberikan data yang jauh lebih berguna dan akurat.
Versi 2: Kurang baris perintah preprocessing dan lebih php pengolahan
Versi ini memiliki berikut keuntungan / kerugian:
- Kurang baris perintah preprocessing berarti kode lagi
- lebih php berarti lebih banyak kontrol dan fitur
- Mengabaikan beberapa duplikat permintaan dari ip yang sama
- Hitungan beberapa pencarian bukannya daftar mereka beberapa kali
- Tampilkan tren informasi dengan menampilkan total mingguan
- outputdi divs digulir agar mudah dilihat dari halaman populer
- lebih cepat dengan panjang permintaan mencapai, yang kira-kira berarti halaman yang lebih populer menunjukkan pertama
- sedikit cepat dan kotor javascript & amp;css untuk membuat divs auto memperluas untuk rinci melihat
& lt; title & gt; Pengguna Pertanyaan & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; bentuk nama = metode "sform" = "mendapatkan" & gt;Cari Judul:? & Lt; masukan size = "80" value = "& lt; php
jika( strlen( $ _ GET [ 'title']) & gt; 0){
echo $ _GET [ 'title'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; nilai input = "Cari" type = "submit" & gt;
PETUNJUK: Masukkan * untuk melihat segala sesuatu.Anda dapat menggunakan judul parsial atau bahkan regex seperti "Samsung * kerusakan." & Lt; / bentuk & gt;
sortbylen( $ a, $ b){
pulang strlen( $ b) -strlen( $ a);}
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ bagaimana / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);
$ bigcmd = & lt; & lt; & lt; eof
egrep-i "(q | p) =" |#use Hanya catatan yang mungkin memiliki permintaan pencarian sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do beberapa perubahan format dan yang paling penting mengubah semua ruangatau menggarisbawahi untuk + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep-i "$ title2" #search untuk title2EOF;
if( $ title = "!"){
print "Mencari" $ judul "..."; 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 = meledak( "\ n", $ searchlogdata); foreach( $ searchlogarray sebagai $ SDATA){ $ logparts = meledak( "", $ SDATA); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], $ pertandingan);$ Ss = urldecode( $ pertandingan [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // mencegah url dari pencarian situsif( ($ ip = $ lip) ||( $ ss = $ lss)!!){ $ lip = $ ip;$ Lss = $ ss;$ Ssdata [ "$ url"] = "$ ss |".;}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata sebagai $ key = & gt; $ value){ $ sarr = meledak( "|", $ value);foreach( $ sarr sebagai $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 sebagai $ key2 = & gt; $ VAL2){ $ urldata [$ key] [$ i] = "$ VAL2: $ key2";.$ STOT [$ key] [$ i] + = $ VAL2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata sebagai $ url = & gt; $ weekdata){ print " & lt; target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata sebagai $ Minggu){ print "
" $ wk ++ "MINGGU( S) Kejagung: Total Pencarian =" $ 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 abu-abu; overflow: scroll '& gt; minggu $ ";}}}
& gt;
& lt; / eof
ToDo
Urut berdasarkan panjang query sebagai semacam sekunder, dengan pertanyaan lagi
pertamaItu saja.Saya akan senang mendengar pengalaman Anda dengan kode ini atau saran untuk perbaikan.
Tips Trik & amp;Peringatan
- Catatan: Saya mendukung p = juga dan q standar = karena Yahoo menjadi bebek aneh itu menggunakan p =
- Version 2 php lebih kompleks dan saya coding cepat sehingga beberapa variabelnama-nama yang dipilih buruk.jangan mengeluh karena kode bebasnya.Tetapi jika Anda ingin memperbaikinya dan dokumen itu dan menambahkannya ke dalam wiki sebagai versi 3 yang akan fantastis:) MEMBAYAR IT MAJU!
- Jika Anda memiliki masalah dengan langkah-langkah ini, mengajukan pertanyaan untuk bantuan lebih lanjut, atau posting di bagian komentar di bawah.
Komentar
| Daniel Unggulan Penulis 69 Artikel Dimulai 2601 Pasal Editan 24.290 Tempat |
Daniel adalah seorang penulis fitur dengan VisiHow.Daniel telah mencapai tingkat "Letnan" dengan 24.290 poin.Daniel telah dimulai 69 artikel dan membuat 2.601 artikel suntingan.17.578 orang telah membaca kontribusi artikel Daniel. |
Daniel : | Hi, nama saya Daniel. |
Daniel : | Dapatkah saya membantu Anda dengan masalah Anda tentang "Mudah mengurai / search string kueri penelusuran halaman web dari log apache menggunakan php awk dan sed utilitas baris perintah linux"? |