Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak odczytać z logów
Piotr :)
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


witam
Dopiero zaczynam poznawać php i stanołem na takim temacie .
Mam plik acces.log z danymi które mnie interesują , jak pbrać z niego numer IP i odwiedzany adres , (niestety dane te nie występują zawsze po tej samej ilości spacji .oto przykład z loga

( 1 wiersz )
1065294793.590 434 192.168.0.2 TCP_MISS/200 351 GET http://216.239.59.104/search? - DIRECT/216.239.59.104 text/htm
(2 wiersz )
1065294793.637 55 192.168.0.2 TCP_MISS/200 1995 GET http://idm.hit.gemius.pl/pp_gemius.js - DIRECT/212.75.96.91

będę wdzięczy za pomoc (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
Kocurro
post
Post #2





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


użyj funkcji explode
Go to the top of the page
+Quote Post
adwol
post
Post #3





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
(niestety dane te nie występują zawsze po tej samej ilości spacji

Dlaczego? Jeśli nie zmieniasz definicji formatu loga to pola są stałe. Potem tylko explode po spacji i gotowe.
Go to the top of the page
+Quote Post
Piotr :)
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


Cytat
(niestety dane te nie występują zawsze po tej samej ilości spacji .oto przykład z loga  

( 1 wiersz )
1065294793.590    434 192.168.0.2 TCP_MISS/200 351 GET http://216.239.59.104/search? - DIRECT/216.239.59.104 text/htm
(2 wiersz )
1065294793.637    55 192.168.0.2 TCP_MISS/200 1995 GET http://idm.hit.gemius.pl/pp_gemius.js - DIRECT/212.75.96.91  
niestety drugi ciąg znaków jest raz 3 cyfrowy a w następnej linijce może być 1 cyfrowy i interesujące mnie dane mam raz po 5 lub po 6 spacjach i nie mam pomysłu jat to zrobić ?;(
Go to the top of the page
+Quote Post
adwol
post
Post #5





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
niestety drugi ciąg znaków jest raz 3 cyfrowy a w następnej linijce może być 1 cyfrowy i interesujące mnie dane mam raz po 5 lub po 6 spacjach  i nie mam pomysłu jat to zrobić ?;(

Eee... Jeśli $s to jest linijka z logiem to:
[php:1:01c427c051]<?php
$a = preg_split('/ +/', $s);
print $a[2];
?>[/php:1:01c427c051]
wypisze Ci IP klienta.
Go to the top of the page
+Quote Post
nobody
post
Post #6





Grupa: Zarejestrowani
Postów: 150
Pomógł: 0
Dołączył: 9.07.2003
Skąd: Lublin city

Ostrzeżenie: (0%)
-----


Chcesz wyswietlic adres IP i odwiedzany link, ja nie widze problemu zeby skorzystac z explode:
[php:1:910befa703]<?php
$log="1065294793.637 55 192.168.0.2 TCP_MISS/200 1995 GET http://idm.hit.gemius.pl/pp_gemius.js - DIRECT/212.75.96.91";
$tab=explode(" ", $log);
print "IP: $tab[2] LINK: $tab[6]";
?>[/php:1:910befa703]
Go to the top of the page
+Quote Post
Piotr :)
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


niestety panowie opcja ze stałą spacją nie działa explode
Umieściłem plik log
http://tekton.homeip.net/dabek/test/access.log(on pod mc na linuksie jest w bardziej czytelny niż pod notatnikiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
http://tekton.homeip.net/dabek/test/jekie.php a tu jest efekt działania .Może ja czegoś nie widzę ( czeski błąd )
może ktoś mam pomysł

Może wiecie jak zmodyfikowac to co jest zapisywane do loga (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
jest to log od sqida
Go to the top of the page
+Quote Post
adwol
post
Post #8





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
niestety panowie opcja ze stałą spacją nie działa explode

A dlaczego nie użyłeś preg_split tak jak Ci napisałem parę postów temu? Kto Ci każe explode używać?
Go to the top of the page
+Quote Post
Piotr :)
post
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


przerobiłem na preg_split i DZIAŁA SUPER . Wcześniej też próbowałem i efekt mialem zupełnie inny , Szczerze mówiac nie znam za fej funcji i nie rozumiem czym różni od explode szukałem w manualu ale za wiele z tej lektóry nie wyniosłem (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ( a na polskich staonach nie znalazłem opisu ) Jeszce raz serdeczne dzięki Jak możesz mi opisac w kilku dzaniach co ona robi będę Dźwięczny ....
Go to the top of the page
+Quote Post
adwol
post
Post #10





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
Jak możesz mi opisac w kilku dzaniach co ona robi  będę Dźwięczny ....

preg_split i explode robią to samo, tzn. rozbijają string na części, z tą róznicą, że explode jako miejsce rozbicia przyjmuje stały ciąg znaków, a preg_split wyrażenie regularne, które jest bardziej elastyczne od zwykłego stringa.
Go to the top of the page
+Quote Post
Piotr :)
post
Post #11





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


poczytałem troche o wyrażeniach regularnych i znowu mam problem może nie wiem jak tego uzywac

mam juz Ip mam juz url lech niewiem jak pozbawić go tego co mi jest nie potrzebne czyli jest link np:

http://www.google.com.pl/search?
a ja chce http://www.google.com.pl (samo odwołanie do domeny !)
[php:1:2b2d602395]<?
$plik = fopen ("/wwwcache/logs/access.log", "r"); // skąd ma pobierać
while (!(feof($plik))) {
$wiersz = fgets ($plik, 200);
$zmienne= preg_split('/ +/', $wiersz); //dzięki adwol ! ?> [/php:1:2b2d602395]

i tu wymyśliłem sobie coś takiego co niestety nie dział ;( a wydaje mi sie ze powinno)
[php:1:2b2d602395]<?
$link = ereg ('^http://*[.]/$', $zmienne[6], $url )

print "$url[1];

?>[/php:1:2b2d602395]
jeżeli ktos wie o co chodzi niech mi napisze ( może być łopatologicznie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )
dzięki
Go to the top of the page
+Quote Post
nobody
post
Post #12





Grupa: Zarejestrowani
Postów: 150
Pomógł: 0
Dołączył: 9.07.2003
Skąd: Lublin city

Ostrzeżenie: (0%)
-----


Moze zrob tak:
[php:1:5d5a6384f3]<?php
$url="http://www.google.com.pl/search?";
$url=parse_url($url);
print $url['scheme']."://".$url['host'];
?>[/php:1:5d5a6384f3]
Pozdro.
Go to the top of the page
+Quote Post
adwol
post
Post #13





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
jeżeli ktos wie o co chodzi niech mi napisze ( może być łopatologicznie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )
dzięki

Staraj się uzywać zamiast ereg-a funkcji preg_*. Są szybsze i mają większe możliwości.
[php:1:ad9ba4f94a]<?php
$link = preg_replace('|^(http://[^/]*?)/.*$|', '1', $url);
?>[/php:1:ad9ba4f94a]
Go to the top of the page
+Quote Post
Piotr :)
post
Post #14





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


jeżeli dobrze rozumiem kod ( załerzy mi aby wiedzieć co pisze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
to
$link = preg_replace('|^(http://[^/]*?)/.*$|', '1', $url);

preg_replace ( zamień istniejace ( podobno ten przedrostek preg to z perla (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?) ( niewiem po co ten pierwszy znacznik | ) wszystkie zaczynające sie od http:// [nie zawierające /] dowolny znak lub zero ) tutaj znowu nie wiem po co to jest /. i kończący sie dowolnym zankiem , tego po przecinku tez nie wiem po co jest ( tu chba ma byc z jakiego ciągu ) I $URL TO WIEM .JEŻELI MOGE PROSIC O WYJAŚNIENIE TEGO
Go to the top of the page
+Quote Post
adwol
post
Post #15





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
podobno ten przedrostek preg to z perla (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?)

Nie podobno, a napewno. :wink:
Cytat
JEŻELI MOGE PROSIC O WYJAŚNIENIE TEGO

Znaki | na początku i końcu wyrażenia ograniczają je i poza tym nic nie znaczą. Mogą to być dowolne dwa takie same znaki. Najczęściej wybiera się taki znak, który nie występuje w samym wyrażeniu aby nie trzeba było niepotrzebnie eskejpować.
Znak ^ oznacza, że dopasowywanie musi być zaczęte od początku stringa.
Wyrażenie w nawiasie (http://[^/]*?) pasuje do ciągu zaczynającego się od http://, po którym występuje dowolnie długi (również pusty) ciąg znaków różnych od / (wyrażenie [^/]*?). Przy czym dopasowanie będzie niezachłanne (znak ?), tzn. dopasowany będzie najkrótszy ciąg spełniający warunki.
Znak / za nawiasem oznacza samego siebie czyli wystąpienie slasha w URLu (będzie to slash oddzielający nazwę hosta od ścieżki do pliku ponieważ poprzednie dopasowywanie było niezachłanne).
.* dopasowuje dowolny ciąg znaków (również pusty) zachłannie, tzn. dopasowany będzie najdłuższy ciąg spełniający warunki.
Znak $ na końcu oznacza że dopasowywany ciąg ma być do końca stringa.

Funkcja preg_replace służy do zamiany dopasowanego fragmentu łańcucha na inny. Ponieważ użyliśmy znaczników ^ i $ które dowiązują dopasowywany łańcuch odpowiednio do początku i końca podanego stringa, całość zostanie dopasowana, a więc też i całość zostanie zamieniona.
To na co zostanie zamieniony dopasowany fragment określa drugi parametr preg_replace. Wartość 1, obecna w tym przypadku, mówi, że należy wstawić to co się dopasowało w pierwszych (w tym wypadku jedynych) nawiasach wyrażenia (po to były w tym wyrażeniu nawiasy).
W konsekwencji zawartość całego stringa $url jest zamieniana na jego początkowy fragment od http:// aż do następnego znaku / wyłącznie.

Myślę, że wytłumaczyłem jasno i przejrzyście i zrozumiałeś o co chodzi. :wink:
Go to the top of the page
+Quote Post
Piotr :)
post
Post #16





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


cos nie działa , juz próbowałem [php:1:fffc382455]<?php
$url="http://www.google.com.pl/search?";
$link = preg_replace('|^(http://[^/]*?)/.*$|', $url, $dobrylink);
print "$dobrylink ";
?>[/php:1:fffc382455]

i też nie działa nawet z ereg w prostej formie ^http dowolny ciąg znaków i mam puste miejsce nie zwtaca ani odrobiny ciągu ,
niewiem co jest grane
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
ten przykład od nobody wysypije mi się , powoli zaczynam sie martwić (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif)
Go to the top of the page
+Quote Post
Piotr :)
post
Post #17





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


wytłumaczone jest super jeszcze tak dokładnego opisu nie znalazłem Wielkie dzięki za chęci przekazania swojej wiedzy .
Musze to jeszcze przetrawić
Go to the top of the page
+Quote Post
adwol
post
Post #18





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
cos nie działa

Eeeeh... Widzę, że jednak mimo moich usilnych starań nie zrozumiałeś:
[php:1:326baa8ef8]<?php
$url = "http://www.google.com.pl/search?";
$link = preg_replace('|^(http://[^/]*?)/.*$|', '1', $url);
print "$linkn";
?>[/php:1:326baa8ef8]
preg_replace ma inną składnię niż ereg. Nie mieszaj tych dwóch funkcji.
Go to the top of the page
+Quote Post
Piotr :)
post
Post #19





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.10.2003

Ostrzeżenie: (0%)
-----


MOJA WINA MOJA WINA MOJA WINA :oops:
jAK NAPISAŁEŚ PRINT $LINK AŻ ZASTYGŁEM
TO JA KOMBINUJĘ CO MAM ŻLE W SKŁADNI CZY ^ CZY NAWIAS NIE ZAMKNIETY ......! a tu okazuje ze ................. jeszce raz dzięki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:11