![]() |
![]() |
![]()
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) |
|
|
![]() |
![]()
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
|
|
|
![]()
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. |
|
|
![]()
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 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ć ?;(
( 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 |
|
|
![]()
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. |
|
|
![]()
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] |
|
|
![]()
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 |
|
|
![]()
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ć? |
|
|
![]()
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 ....
|
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
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] |
|
|
![]()
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 |
|
|
![]()
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: |
|
|
![]()
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) |
|
|
![]()
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ć |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:11 |