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