Forum Webscript.Ru
		Программирование => PHP => Тема начата: Alexandr от 18 Июня 2002, 13:12:43
		
			
			- 
				Как можно отлавливать что у меня юзер favicon.ico выпрашивает? (эт для того что бы знать сколько человек мой сайт в избранное добавили)
 Ща я так смотрю:
 Заглядываю в error.log. Если там есть такая строчка:
 [error] [client 80.237.8.36] File does not exist: /web/autodealer/site/www/addsite/autodiler.ru/favicon.ico
 Значит юзер добавил сайт в избранное.
 НО ЭТО ИЗВРАТ.
- 
				Alexandr 
 Первое что пришло в голову:
 
 
 $data=file("error.log");
 for($i=0;$i{
 list($date,$type,$client,$error)=split(" ",$data[$i]);
 if(ereg("favicon.ico",$error){print "Типа $client в $date решил проверить на наличие иконки";}
 }
 ?>
 
- 
				Не покатит.
 favicon.ico мне надо на сайт кинуть, что бы иконка в IE была, а следовательно в ерор.логе её не будет.
 И ещё твой скрипт придётся запускать по расписанию.
- 
				Alexandr 
 Капля воображения и скрипт переписывается под access.log:
 
 
 $data=file("access.log");
 for($i=0;$i{
 if(ereg("(.*) - (.*) - [(.*)] - \\"(.*)\\" - (.*) - (.*)",$data[$i],$regs))
 {
 if(ereg("favicon.ico",$regs[4]){print "Типа $regs[1]($regs[2]) в $regs[3] решил проверить на наличие иконки";}
 }
 }
 ?>
 
- 
				Заглядываю в error.log. Если там есть такая строчка: 
 [error] [client 80.237.8.36] File does not exist: /web/autodealer/site/www/addsite/autodiler.ru/favicon.ico
 Значит юзер добавил сайт в избранное.
 
 
 бред.
- 
				Unregistered 
 Почему же?
- 
				Unregistered 
 Почему же?
 
 по жизни.
 берем, например, мозиллу. И идем, например, на http://sourceforge.net/
 ждем окончания загрузки страницы и любуемся на красивенький кружочек в адресной строке.
 В избранное, ес-сно, не добавляем.
 Имя файла с этим кружочком сказать, или сами догадаетесь?
 
 
 WBR,
 Voodoo
 http://voc.sf.net/
- 
				Оффтопик.
 ОЧЕНЬ неоптимальный алгоритм.
 На каждую строку напускается два ерега, один из которых не нужен вовсе.
 Куда быстрее будет проверять по strstr() наличие в строке "favicon.ico" и только в этом случае натравливать ерег.
- 
				http://forums.webscript.ru/showthread.php?s=&threadid=5428&msgnum=7
			
- 
				ЖУТЬ!
 он не неоптимаьный! Он вообще нерабочий.
 
 list($micro,$time)=explode(" ",microtime());
 $stamp=$micro+$time;
 $data=file("log.txt");
 for($i=0;$i<200;$i++)
 {
 if(ereg("(.*) - - \\[(.*)\\] \\"(.*)\\" (.*) \\"(.*)\\" \\"(.*)\\"",$data[$i],$regs))
 {
 if(ereg("styles.css",$regs[3])){print "Типа $regs[1] в $regs[2] решил проверить на наличие иконки
 ";}
 }
 }
 list($micro,$time)=explode(" ",microtime());
 echo ($micro+$time)-$stamp;
 
 Только 200 итераций он деает 8 секунд!!!
 А вот это
 
 $data=file("log.txt");
 for($i=0;$i  if(strstr($data[$i],"styles.css")) {
 if(ereg("(.*) - - \\[(.*)\\] \\"(.*)\\" (.*) \\"(.*)\\" \\"(.*)\\"",$data[$i],$regs)) echo "Типа $regs[1] в $regs[2] решил проверить
 ";
 }
 }
 
 отработало за секунду, а весь лог в 400к - за 12.
 Честно говоря, я не ожидал такой огромной разницы.
- 
				идем дальше.
 Вспоминаем, что ереги медленнее прегов.
 Пишем
 if(preg_match("/(.*) - - \\[(.*)\\] \\"(.*)\\" .*/",$data[$i],$regs))
 И получаем приемлемый результат - 0.2 секунды на весь файл.
- 
				Справедливости ради, надо признать, что если проверять прегом даже каждую строчку, то все равно получается быстро. Но это не оправдание писать неоптимальные прогаммы :-)
			
- 
				access.log У меня весит 10 мегов.
 Так что не покатит.
- 
				У тебя не катит даже не по этой причине.
 См. сообщение от YA
- 
				У тебя не катит даже не по этой причине. 
 См. сообщение от YA
 
 Ну можно же базу по IP\'шникам подбивать.
- 
				>Ну можно же базу по IP\'шникам подбивать.
 
 Да можно, все можно. Только гемморой это. Как только начинаешь вместо того, чтобы написать новый алгоритм, навешивать на старый всякие примочки - ничего путного не выйдет.
 Вообще, нет способа однозначно определить юзвера. Cookie многие у себя запрещают (потому как пугаются сплеш-скрина, вопящего о них), Ip-адрес определять вообще неэффективно в виду широкого развития Dial-up\'a и наличия прокси-серверов.
 И вообще, зачем тебе знать, сколько юзверов добавили твой сайт в избранное? Может, лучше знать сколько юзверов по таким ссылкам пришло?
- 
				Может, лучше знать сколько юзверов по таким ссылкам пришло? 
 А это как?
- 
				Alexandr 
 spylog.ru
 hotlog.ru
- 
				spylog.ru 
 hotlog.ru
 
 А самому (PHP)?
- 
				А ты попробуй поле HTTP-REFERER проанализировать. Если пустое - значит глупый юзверь либо ручками адрес набил, либо из Избранных вошел (что, IMHO (http://www.tuxedo.org/~esr/jargon/html/entry/IMHO.html) разницы большой не имеет)
			
- 
				Подобный вопрос встречаю уже в который раз.
 Ребята !
 Зачем  по второму кругу делать то, что уже делает Апаче ?
 Однозначно нужно парсить логи специальной программой, не перегружая по пустякам вебсервер.
 Одна из программ лежит здесь : http://www.mach5.com/
 
 [OFF] если у вас 1000 файлов надо проанализтровать - вы 1000 скриптов писать будете ?[/OFF]
- 
				У меня на сайте логи ведутся за неделю и занимают мега по четыре каждый. Нафиг мне столько лопатить? Кроме того, многие провайдеры (особенно халявные) не дают вести логи.
 
 И, наконец, причем тут логи? (см. начало беседы)
- 
				А ты попробуй поле HTTP-REFERER проанализировать. Если пустое - значит глупый юзверь либо ручками адрес набил, либо из Избранных вошел (что, IMHO разницы большой не имеет) 
 Как раз так имеет, т.к. юзер является потенциальным постоянным посетителем твоего сайта!
- 
				А если он твой адрес запомнил и ручками адрес набивает, то он не потенциальный? Я, например, большую часть адресов запоминаю.
			
- 
				Избранное & favicon.ico & PHP 
 Понял, что я хотел.
 Мона ч/з mod_rewrite