Система статистики «Spesta 2.10 a+b»
Какое-то время назад я патчил (два раза) систему статистики «Спеста» Дмитрия Смирнова, правил дыры и ошибки. Сама система мне нравится — простая, понятная, после патчей даже работает неплохо. Но при работе генерирует кучу warnings и notices, что захламляет мой лог ошибок и настраивать её не слишком-то приятно.
Недавно я узнал, что существует клон это системы — Spesta 2, который написали в Analog Group. Приятно, что код написан с форматированием и почти не генерирует warnings и notices, но общее ощущение — что авторы двигались в правильном направлении, но заплутали по дороге.
Я было думал выпустить серию патчей, как это было со «Спестой», но патчей оказалось слишком много. В общем, выложил пропатченную версию у себя. Кому надо — забирайте. Оригинальная версия была 2.00a, эта называется 2.10a+b, потому что на «бету» она не тянет, а пачти обозначить как-то надо.
Итак, изменения, всё что успел увидеть и поправить за час работы:
- нарисован favicon и дорисован логотип
- выкинута реализация функции in_array (авторы плохо знают язык?)
- работа с файлами заменена на более безопасную — с flock и append. Там где можно, используются file_get_contents и file_put_contents (это означает, что раньше эта система «теряла» часть данных)
- патч для более точного подсчёта уников (с использованием данных браузера)
- вычищены .htaccess от лишнего мусора
- поправлены регулярные выражения в коде
- переписан странный поиск с stristr
- на странице хитов теперь выводятся тИЦ и Page Rank
- сделан парольный вход, задаётся в конфиге (по умолчанию, логин — admin, пароль — test)
- для совместимости со «Спестой» сделан файл click.php
- исправлены ситуации, в которых генерировались notices и warnings (в основном — на пустых данных)
- исправлена ошибка в работе с файлом sites.txt
- ряд мелких улучшений кода, которые лень описывать
Важно: данные «Спесты» и «Спесты 2» между собой несовместимы, т. е. вы потеряете предыдущую статистику при замене одной версии на другую. Второе важное замечание — в «Спесте 2» нет статистики по кликам на ссылки и IP-адресам (лично мне она не нужна, так что вставлять в код я её не буду).
Инструкция по установке: распаковываете в нужную папку «Спесту 2», скрипт должен иметь возможность писать в папки data и reports. Если у вас была оригинальная «Спеста», удалите её, поверх ставить нельзя. Далее, вы должны подключить «Спесту» на каждой странице вашего сайта. Для PHP это будет выглядеть так: <?include 'каталог со спестой/counter.php'?>;
для HTML страниц можно попробовать сделать следующее: <!--#include virtual='/каталог со спестой/counter.php' -->
Ссылка для невнимательных, скачать можно отсюда: /files/spesta-210.zip.
Статистика по IP штука нужная — люди таким образом заходы с офисов конкурентов и интерес конкретных клиентов заценяют.
Комментарий для roodz.livejournal.com:
Мне она не нужна — какие могут быть «офисы конкурентов и интерес клиентов» у меня на блоге?
Комментарий для Евгения Степанищева:
PR забавно работает. Показывает 0. А ведь там и правда он должен быть, ведь у страницы статистики нет PR вообще -_-
Гм… да, я позабыл, что Page Rank он для страницы, а не для сайта, вот чёрт…
Комментарий для Евгения Степанищева:
Warning: touch() [function.touch]: Utime failed: Operation not permitted in /home/skurudo/skurudo.ru/www/stat/includes/index.inc.php on line 124
Подскажи, пожалуйста, как лечить?
Комментарий для Евгения Степанищева:
http://www.prchecker.info/pagerank-check-button.php — можно на что-то такое заменить, там как раз для сайта. Генерируется типа уникальная ссылка и можно ставить.
Поправил это, спасибо!
Надо поставить права на запись на папки data и reports.
Можно качать новую версию — баг с PR поправил (находится на том же месте, файл называется так же).
Комментарий для Евгения Степанищева:
drwxrwxrwx 2 skurudo users 512 Mar 20 15:05 data
drwxrwxrwx 2 skurudo users 512 Mar 20 15:32 reports
Уже стоят вообще-то.
а что в этой спесте нового вообще есть?
Комментарий для makoratao.livejournal.com:
Читай, друже, изменения у болка и у Аналогов:
http://www.analog-group.ru/projects/spesta2.html
Комментарий для skurudo.livejournal.com:
А на файлы, которые внутри?
Комментарий для makoratao.livejournal.com:
Это не новая «Спеста», это другая «Спеста».
Комментарий для Евгения Степанищева:
drwxrwxrwx 5 skurudo users 512 Mar 20 15:21 ..
-rwxrwxrwx 1 skurudo users 82 Mar 20 14:43 .htaccess
-rwxrwxrwx 1 skurudo users 1526 Mar 20 16:06 agents.txt
-rwxrwxrwx 1 wwwserver users 25 Mar 20 16:06 count.txt
-rwxrwxrwx 1 wwwserver users 224 Mar 20 16:06 ip.txt
-rwxrwxrwx 1 skurudo users 308 Mar 20 15:42 referers.txt
-rwxrwxrwx 1 skurudo users 4466 Mar 20 16:06 requests.txt
-rwxrwxrwx 1 wwwserver users 262 Mar 20 15:30 se.txt
-rwxrwxrwx 1 wwwserver users 262 Mar 20 15:30 se10.txt
-rwxrwxrwx 1 skurudo users 0 Mar 20 14:43 spiders.txt
-rwxrwxrwx 1 skurudo users 91 Mar 20 15:30 words.txt
Тоже нормал вроде бы.
Очень здорово, что Вы это сделали.
Но вот статистики по «кликам» очень нехватает.
Буду очень признателен, если Вы ее все-таки прикрутите.
Комментарий для Евгения Степанищева:
болтикова в Поисковых словах... не понимает utf8? Или это персонально у меня такое? :-)
Комментарий для skurudo.livejournal.com:
Гм, так проблема с правами ушла или нет? Если нет, то попробуй вписать туда var_dump($fstat); после touch и посмотри в какой файл оно пытается писать.
А с unicode там смешно — оно его только для google делает, для остальных — нет. Надо доделать, я думаю. А это какой поисковик?
Комментарий для teplorod.livejournal.com:
Хм… а зачем она, кстати? Может и сделаю, если пойму зачем она.
! ..\spesta-210.zip: The archive is corrupt
Архив поломатый.
Комментарий для alick.ru:
Перезалил. Пашет?
Комментарий для skurudo.livejournal.com:
Сейчас попробовал воткнуть туда обнаружение кодировки. Кстати, у вас модули iconv или multibyte string есть? Я выкинул оттуда «ручное» преобразование, понадеявшись, что эти модули есть у всех.
Комментарий для Евгения Степанищева:
Статистика по кликам нужна в двух случаях:
Вот пример: http://flogiston.ru/stat/?report=l
(демо-пароль и логин стандартные для прежних версий spesta)
Для меня эта статистика полезна, т. к. я знаю, где людям не хватает контента, и они с сайта уходят.
Комментарий для Евгения Степанищева:
Будешь смеяться, но ошибка была только с теми отчетами, которые от моего имени создались. Там выше есть список. А отчеты собственно: referers.txt, requests.txt, spiders.txt, words.txt. Удалил в пень. Оно создало заново уже от себя, в смысле от имении wwwserver’a.
Комментарий для teplorod.livejournal.com:
Понятно. Возможно сделаю в скором времени, ничего не обещаю.
Комментарий для skurudo.livejournal.com:
Ну и бог с ними :) Я из архива эти файлы вообще убрал :)
Комментарий для Евгения Степанищева:
Можно на «ты». Скуруда не нежный.
Error where found in ZIP file ;-(
Комментарий для skurudo.livejournal.com:
Да, только что перезалил. Не понимаю что случилось с архивом, можно качать.
Мне тут пришла мысль на тему маркировки «ты»-«вы», надо будет реализовать :) Просто забываю с кем на «ты», а с кем на «вы» :)
Комментарий для Евгения Степанищева:
Гм, что-то, и правда, не то с архивом. Пишет о том, что архив поврежден.
Комментарий для skurudo.livejournal.com:
Ещё раз скачай, сейчас всё ок. Если качаешь «Оперой», то зайди в закачки и выбери «скачать ещё раз» («restart transfer»). Оно кеширует, похоже.
Комментарий для Евгения Степанищева:
Спасибо.
Комментарий для Евгения Степанищева:
Ага. Пашет.
Спасибо.
Кстати, а способы установки остались точно такими же, как у Димы? Просто readme в архиве не нашлось.
И как-то оно странно реагирует на файл data/sites.txt:
Notice: Undefined variable: this in /stat/index.php on line 76
Комментарий для alick.ru:
Способ установки я написал в своём посте.
Гм. А это какая-то ошибка, там не может быть $this.
Комментарий для Евгения Степанищева:
«Способ установки я написал в своём посте.»
ты про это?
«Инструкция по установке: полностью удаляете „Спесту“, ставите в ту же папку „Спесту 2“, скрипт должен иметь возможность писать в папки data и reports.»
А как быть, если спесты раньше не было?
Комментарий для alick.ru:
Щас допишу. Файл можно скачать заново — надеюсь, я правильно догадался что происходит в том куске кода, файл поправил.
Комментарий для Евгения Степанищева:
Ошибка исчезла, но ссылки он все-равно криво поставил.
Там формат файла, если не помнишь:
Название1|Урля1
Название2|Урля2
Название3|Урля3
А он генерит:
<a href=’Название1|Урля1’>Название1|Урля1</a> | <a href=’Название2|Урля2’>Название2|Урля2</a> | <a href=’Название3|Урля3’>Название3|Урля3</a>
Т. е. забывает про разделитель.
Комментарий для alick.ru:
Инструкцию дописал.
Я не то что не помню, я этого не знаю, никогда этим не пользовался :) А эта фиговина, похоже, имеет свой формат. Впрочем, я уже поправил — сделал поддержку обоих форматов, можно качать заново.
Комментарий для Евгения Степанищева:
<a href=’$site$link’><b>$name</b></a> — вот эта штука никогда не срабатывает
Комментарий для alick.ru:
Как нет? Только что вписал:
Bolknote|bolknote.ru
Другой сайт|bolk.exler.ru
Сработало.
Комментарий для Евгения Степанищева:
у меня не срабатывает проверка на strtolower($site) == $current_site
Комментарий для Евгения Степанищева:
т. е. у меня там всегда false
Комментарий для alick.ru:
давайте в аську, утомительно. 2993333
Комментарий для Евгения Степанищева:
странная фигня. на локальном компе пашет, на серваке не пускает в админку.
в чем может быть прикол?
Комментарий для 404team.org:
Подробнее. Что именно происходит?
Комментарий для Евгения Степанищева:
просто не пускает, как при неправильном вводе пароля.
Комментарий для 404team.org:
PHP установлен как модуль? Или как CGI?
Комментарий для Евгения Степанищева:
как CGI.
проверил на другом хосте, где стоит как модуль — то же самое.
Комментарий для 404team.org:
Попробуйте выкачать ещё раз, я сделал небольшие правки на случай, если у вас PHP в режиме CGI.
Комментарий для 404team.org:
4ert, russkij otvalilsja v windows.
poprobujte posmotret’ 4to u vas v $_SERVER. V file ’auth.inc.php’ dobav’te persuju stroku:
echo ’<pre>’; var_dump($_SERVER);
potom posmotrite, est’ li u vas tam peremennyi PHP_AUTH_USER i PHP_AUTH_USER. elsi net — posmotrite chto est’. Esli 4to — zavtra v as’ke mozhno otladit’.
Комментарий для Евгения Степанищева:
большое спасибо. заработало!
Украли проект!!!
Поставил, работает как часы. Спасибо!
А сколько весит архив? Перекачиваю уже 100й раз (размер всегда 22076) — все время неожиданный конец архива :/
Написал в аську небольшой багрепорт.
Комментарий для alick.ru:
http://php.net/setlocale в помощь
Комментарий для alick.ru:
Извиняюсь, последний комментарий не читайте, не проснулся ещё :-/
Комментарий для splurov.livejournal.com:
Угу, баг исправили и он был совсем не в том.
Доброго вам утречка :-)
Комментарий для cfyz.livejournal.com:
Не понимаю что это за проблема такая, но иногда, после заливки на FTP архив оказывается битым. Перезалил.
Комментарий для coprophagous.ru:
Жди «Блоговара 2» с моими патчами ;)
Что-то странное, среди используемых браузеров нет ни одного IE.
Это только у меня такое?
Попробовал зайти локально MSIE, увидел: «Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; WebMoney Advisor; .NET CLR 2.0.50727)»
Так что всё должно работать.
Для HTML страниц и WAP/WML страниц также работает способ вставки через IMG
пример
img src= http://site.ru/stats/counter.php
Комментарий для kvisaz.ru:
Предыдущее сообщение несколько неверно.
Работать работает, но с некоторыми ошибками (в частности неправильно показываются страницы)
Комментарий для Евгения Степанищева:
У меня ощущение, что вот этот способ
<!--#include virtual=’/каталог со спестой/counter.php’ -->
не вполне работает.
У меня раньше на одном из сайтов SpeSta ставилась через вот такой код:
<script language=«javascript»>
r=«»+Math.random()+«&ref=»+escape(document.referrer)+«&pg=»+
escape(window.location.href);
document.write(«<img src=’ http://psyberlink.flogiston.ru/stat/counter.php?id=%22%2B
r+»’ border=0 width=1 height=1 alt=SpeSta>»)</script>
Можно ли вызывать систему статистики как-то похожим на это способом?
Комментарий для Евгения Степанищева:
сорри, не знал, что html-теги совсем не отображаются.
Комментарий для teplorod.livejournal.com:
Не вполне — это как? Что конктретно не работает?
< у тебя в комментариях не работает, а я хотел код вызова обсудить.
Комментарий для teplorod.livejournal.com:
Как это не работает? Работает «<» и «<» показывает равно то, что ты написал — сочетание знаков «<» и «<».
Что-то у меня старая спеста с 09.10.2008 перестала правильно считать статистику. Это можно видеть вот здесь: http://eduabroad.ru/stat/?month=10.2008%26l=demo%26p=demo
А ведь столько лет прослужила верой-правдой (вот сколько: http://eduabroad.ru/stat/?month=06.2003%29. Что делать, чинить ниасилил, надо ставить новьё. В связи с этим 2 вопроса им один крик боли. Вопросы: 1) у меня тут вот на главстраницо ( http://eduabroad.ru/ ) внизу вылезли всякие данные — как их отключить? В конфиге не нашел. 2) А можно вызвать без php и иклюдов? Способ с Яваскриптом или однопиксельной картинкой не прокатит? (<img src=» http://eduabroad.ru/stat/counter.php%22 border=0 width=1 height=1 alt=«SpeSta«>) Крик боли: верните статистику кликоф!
А што — тут никого нет? :-0
Комментарий для ulrith.livejournal.com:
Есть. Но мне пока не до «Спесты».
1) не увидел ничего внизу
2) по поводу других способов не знаю, посмотрите на сайте первых разработчиков Spesta2.
Статистики кликов в «Спесте2» не было никогда.
Сорри за анноинг, бат...
1) Внизу выдаёццо: «IP: 89.207.222.46 (091f412984b82451808b7d64aef2eb06)
Host: eduabroad.ru
Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008111317 Ubuntu/8.04 (hardy) Firefox/3.0.4
Request: /
Referer: bolknote.ru/2008/03/20/~1631»
2) Понял.
Статистика кликов в старой спесте:
http://eduabroad.ru/stat/?report=l%26l=demo%26p=demo
А, понял. В Спесте2 — да, не было. А жаль!
Комментарий для ulrith.livejournal.com:
Гм… ничего не понимаю. Никогда такого не видел. А место в коде, где это происходит, вы не нашли?
Не-а, не нашёл. Думал так и должно быть для отладки, но отключение соотв. параметра в конфиге ничего не даёт.
Комментарий для ulrith.livejournal.com:
Будет время, попробую поковырять.
Думаю эта штука вылазит потому что я прописал в конфиге свой домашний ip. Как Вам версия?
Комментарий для ulrith.livejournal.com:
Никак :) Куда вы его записали?
В конфиг. Что, непонятно? :-)
Комментарий для ulrith.livejournal.com:
Не пронятно, ага.
В конфиг.инк.пхп я прописал:
База своих ip-адресов, что бы не учитывать их
$cfg[’stat’][’ip’] = array();
$cfg[’stat’][’ip’][] = «127.0.0.1»;
$cfg[’stat’][’ip’][] = «мой айпи»;
И вот поэтому оно мне все это и показывает. Вам ведь этого не видно? Или Вам тоже видно?
Комментарий для ulrith.livejournal.com:
Мне этого не видно.
Вот! (Торжествуя.) Значиццо оно показывает всю эту фегню только для меня, когда я захожу со своего айпи-адреса. Фух. :-)
Комментарий для ulrith.livejournal.com:
А, ну может быть, видимо это фича :)
Там в counter.inc.php есть проверка, и если ip совпадает с конфигом, то выводится эта инфа, если нет, то плюсуется статистика
Комментарий для artconcepts.ru:
Значит это какая-то фича, я не в курсе, я же только патчил баги и дописал функционал, но не являюсь родителем этой версии.
я щас написал себе свою статистику, но уже на базах....
и что самое обидное, на локалхосте работает так же, а на сервере уже где то в 10 раз медленнее. например 0.007 спеста а у меня 0.07. причем если спеста стабильно, то у меня может и 0.5 вылезти...
Всё из-за баз, поскольку алгоритм похожий, тормозят именно запросы. Не знаешь где про оптимизацию запросов почитать?
Комментарий для artconcepts.ru:
Если MySQL, то тут: http://www.mysqlperformanceblog.com/
Спасибо, почитаю ;)
Спасибо огромное. Ваша версия (дополнение, аддон) единственная которая у меня заработала!
Спасибо!
Комментарий для foxter.livejournal.com:
Ну, от совершенства она далека, а допиливать уже не хочется :)