Як дізнатися, звідки прийшли відвідувачі
Повісивши на свій сайт лічильники я раптом виявив, що не одна з організацій, мені їх надали, не дозволяє подивитися, по якому запиту в Яндексі (і інших пошукових системах) та чи інша людина прийшов на мій сайт. Принаймні, ніхто не надає таку послугу безкоштовно.
Тоді я образився на них за те, що мені, в такому випадку, доведеться самому писати собі невеликий логгер. Завдання - найлегша, тому і ламало її робити. Однак господарі всяких сайтів-лічильників мають нахабство брати за це гроші, вселяючи в людей віру, що свої гроші бурт не дарма. Що ж, розвіємо їх надії нас поиметь!
Сторінка, з якої прийшли
Отже, отримати сторінку, з якої користувач потрапив на цю, - легше легкого. Її адреса за замовчуванням передається в заголовку HTTP-запиту користувача в рядку "Referrer:". Отримати її значення з PHP можна, викликавши відповідну функцію наступним чином:
getenv ( "HTTP_REFERER")
Так що, в принципі, можна просто взяти і написати окрему функцію, яка:
$ H = getenv ( "HTTP_REFERER"); // Отримує URL, з якого прийшов відвідувач $ F = fopen ( "mylog.log", 'a'); // Відкриває файл з балками на додавання flock ($ f, 2); // Забороняє до нього доступ до тих пір, // Поки він не буде закритий (на випадок, якщо два // Скрипта захочуть одночасно записати щось // В файл, одному з них доведеться почекати) fwrite ($ f, "$ H \ n"); // Пише в файл отриманий трьома рядками вище URL fclose ($ f); // Закриває файл
Потім цю функцію можна викликати на початку какждого php-скрипта сторінок сайту.
Як дізнатися ip, свою долю і точний час
Але! Раз вже ми тут, можна трохи доопрацювати функцію, щоб дізнатися IP відвідувача (по ньому можна приблизно прикинути область, де він знаходиться фізично), його браузер (цікаво ж) і сторінку, куди він, власне прийшов (звучить трохи дивно - ми ж і так знаємо, що прийшов він на нашу сторінку, але уявіть, що у вас цю функція викликається в ділянці заголовки коду, який однаково вставляється в усі ваші сторінки, - а так, мабуть, ви й зробите). Також непогано б мати час, коли чол прийшов до нас на сайт - потім можна буде проаналізувати активність користувачів і т.п.
Так що, функція прийме наступний вигляд:
$ Er_time = date ( "H: i: sd M Y"); // Записуємо поточний час в рядок, // Використовуючи заданий формат $ U = getenv ( "HTTP_USER_AGENT"); // Отримуємо дані про софт, // Який викорис користувач $ H = getenv ( "HTTP_REFERER"); // Отримуємо URL, з якого прийшов відвідувач $ R = getenv ( "REMOTE_ADDR"); // Отримуємо IP відвідувача $ W = getenv ( "REQUEST_URI"); // Отримуємо відносний адреса сторінки, // Яку запросив відвідувач $ F = fopen ( "logs / visits.log", 'a'); // Далі - зрозуміло, пишемо все це в файл flock ($ f, 2); fwrite ($ f, "$ er_time \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); fclose ($ f);
Але і ця функція далека від досконалості! Справа в тому, що російських символів ви в цих урлах не побачите - їх будуть замінювати їх 16-ковий подання (передують знаком "%"). Тому непогано б, щоб скрипт самостійно приводив їх до удобочитаем увазі: заміняв всякі
http://www.yandex.ru/yandsearch?text=%E9%EE%E6%FB%E3+%F4%F2%F3%EC%E0%ED%E5&stype=www
на
http://www.yandex.ru/yandsearch?text=йожыг+фтумане&stype=www
Робити ми це будемо наступним шматком коду з використанням регулярних виразів:
while (ereg ( '% ([0-9A-F] {2})', $ H)) {// поки в рядку $ H буде хоч одне // Поєднання знака% і двох символів з діапазонів 0-9 і AF // (Шістнадцяткові цифри) $ Val = ereg_replace ( '. *% ([0-9A-F] {2}). *', '\ 1', $ H); // Присвоюємо $ val результат заміни виразу, // Містить відсоток і два символу із зазначених вище інтервалів, // На ці самі два символу // Коротше кажучи, тепер в $ val у нас чергові 2 символи, // Перед якими в вихідному виразі стояв відсоток $ Newval = chr (hexdec ($ val)); // Отримуємо сиволов з номером, // Отриманим переведенням отриманого в $ val // Шестнадцатиричного числа в "нормальне" $ H = str_replace ( '%'. $ Val, $ newval, $ H); // Стандартна строкова функція заміни - // Замінює підрядок, що складається з відсотка і друх символів // З змінної $ var на символ, який ці два // Шістнадцяткових символу кодували } // Кінець циклу
Разом:
$ Er_time = date ( "H: i: sd M Y"); // Записуємо поточний час в рядок, // Використовуючи заданий формат $ U = getenv ( "HTTP_USER_AGENT"); // Отримуємо дані про софт, // Який викорис користувач $ H = getenv ( "HTTP_REFERER"); // Отримуємо URL, з якого прийшов відвідувач $ R = getenv ( "REMOTE_ADDR"); // Отримуємо IP відвідувача $ W = getenv ( "REQUEST_URI"); // Отримуємо відносний адреса сторінки, // Яку запросив відвідувач while (ereg ( '% ([0-9A-F] {2})', $ H)) {// поки в рядку $ H буде хоч одне // Поєднання знака% і двох символів з діапазонів 0-9 і AF // (Шістнадцяткові цифри) $ Val = ereg_replace ( '. *% ([0-9A-F] {2}). *', '\ 1', $ H); // Присвоюємо $ val результат заміни виразу, // Містить відсоток і два символу із зазначених вище інтервалів, // На ці самі два символу // Коротше кажучи, тепер в $ val у нас чергові 2 символи, // Перед якими в вихідному виразі стояв відсоток $ Newval = chr (hexdec ($ val)); // Отримуємо сиволов з номером, // Отриманим переведенням отриманого в $ val // Шестнадцатиричного числа в "нормальне" $ H = str_replace ( '%'. $ Val, $ newval, $ H); // Стандартна строкова функція заміни - // Замінює підрядок, що складається з відсотка і друх символів // З змінної $ var на символ, який ці два // Шістнадцяткових символу кодували } // Кінець циклу $ F = fopen ( "logs / visits.log", 'a'); // Далі - зрозуміло, пишемо все це в файл flock ($ f, 2); fwrite ($ f, "$ er_time \ n Br: $ U \ n Rf: $ H \ n IP: $ R \ n Rq: $ W \ n"); fclose ($ f);
Вже по логам цього скрипта можна судити, звідки прийшов відвідувач, по яким сторінкам він пройшов і на якій сторінці покинув сайт. Так, безумовно, можна було це зробити і сесіями - але нам ліньки. А так - 2 хвилини, і можна насолоджуватися!
Ти дізнаєшся її з тисячі
Це - основа. Далі можна багато чого придумати: наприклад, з рядків, що містять "http://www.yandex.ru/yandsearch", вирізати ту частину, в якій, власне, міститься запит, і записувати в який-небудь файл типу "yandex.log ". Загалом, на що фантазії вистачить - все можна забабахати!
Коментарі
Коментуючи, пам'ятайте про те, що зміст і тон Вашого повідомлення можуть зачіпати почуття реальних людей, проявляйте повагу та толерантність до своїх співрозмовників навіть у тому випадку, якщо Ви не поділяєте їхню думку, Ваша поведінка за умов свободи висловлювань та анонімності, наданих інтернетом, змінює не тільки віртуальний, але й реальний світ. Всі коменти приховані з індексу, спам контролюється.