Система статистики «Spesta 2.10 a+b»

Логотип игры SPECTRA 2: оранжевый квадрат с чёрной буквой «S» и цифрой «2», под ним надпись «SPECTRA 2» белыми буквами на чёрном фоне.
Спеста

Какое-то время назад я патчил (два раза) систему статистики «Спеста» Дмитрия Смирнова, правил дыры и ошибки. Сама система мне нравится — простая, понятная, после патчей даже работает неплохо. Но при работе генерирует кучу 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.

Комментарии 92

roodz.livejournal.com № 1
Статистика по IP штука нужная — люди таким образом заходы с офисов конкурентов и интерес конкретных клиентов заценяют.
Евгений Степанищев (bolknote.ru) автор № 2
Мне она не нужна — какие могут быть «офисы конкурентов и интерес клиентов» у меня на блоге?
skurudo (openid.yandex.ru/users/skurudo) № 3
PR забавно работает. Показывает 0. А ведь там и правда он должен быть, ведь у страницы статистики нет PR вообще -_-
Евгений Степанищев (bolknote.ru) автор № 4
Гм… да, я позабыл, что Page Rank он для страницы, а не для сайта, вот чёрт…
skurudo (openid.yandex.ru/users/skurudo) № 5
Комментарий для Евгения Степанищева:

Warning: touch() [function.touch]: Utime failed: Operation not permitted in /home/skurudo/skurudo.ru/www/stat/includes/index.inc.php on line 124

Подскажи, пожалуйста, как лечить?
Евгений Степанищев (bolknote.ru) автор № 8
Надо поставить права на запись на папки data и reports.

Можно качать новую версию — баг с PR поправил (находится на том же месте, файл называется так же).
skurudo.livejournal.com № 9
Комментарий для Евгения Степанищева:

drwxrwxrwx 2 skurudo users 512 Mar 20 15:05 data
drwxrwxrwx 2 skurudo users 512 Mar 20 15:32 reports

Уже стоят вообще-то.
makoratao.livejournal.com № 10
а что в этой спесте нового вообще есть?
Евгений Степанищев (bolknote.ru) автор № 12
Комментарий для skurudo.livejournal.com:

А на файлы, которые внутри?
skurudo.livejournal.com № 14
Комментарий для Евгения Степанищева:

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

Тоже нормал вроде бы.
teplorod.livejournal.com № 15
Очень здорово, что Вы это сделали.
Но вот статистики по «кликам» очень нехватает.
Буду очень признателен, если Вы ее все-таки прикрутите.
Евгений Степанищев (bolknote.ru) автор № 18
Хм… а зачем она, кстати? Может и сделаю, если пойму зачем она.
skurudo.livejournal.com № 16
Комментарий для Евгения Степанищева:

болтикова в Поисковых словах… не понимает utf8? Или это персонально у меня такое? :-)
Евгений Степанищев (bolknote.ru) автор № 17
Комментарий для skurudo.livejournal.com:

Гм, так проблема с правами ушла или нет? Если нет, то попробуй вписать туда var_dump($fstat); после touch и посмотри в какой файл оно пытается писать.

А с unicode там смешно — оно его только для google делает, для остальных — нет. Надо доделать, я думаю. А это какой поисковик?
Евгений Степанищев (bolknote.ru) автор № 21
Комментарий для skurudo.livejournal.com:

Сейчас попробовал воткнуть туда обнаружение кодировки. Кстати, у вас модули iconv или multibyte string есть? Я выкинул оттуда «ручное» преобразование, понадеявшись, что эти модули есть у всех.
teplorod.livejournal.com № 22
Комментарий для Евгения Степанищева:

Статистика по кликам нужна в двух случаях:
1. Если рекламу на ресурсе продали, и нужно отследить эффективность.

2. Чтобы посмотреть, с каких страниц народ активно уходит по ссылкам.
Вот пример: http://flogiston.ru/stat/?report=l
(демо-пароль и логин стандартные для прежних версий spesta)
Для меня эта статистика полезна, т.к. я знаю, где людям не хватает контента, и они с сайта уходят.
skurudo.livejournal.com № 23
Комментарий для Евгения Степанищева:

Будешь смеяться, но ошибка была только с теми отчетами, которые от моего имени создались. Там выше есть список. А отчеты собственно: referers.txt, requests.txt, spiders.txt, words.txt. Удалил в пень. Оно создало заново уже от себя, в смысле от имении wwwserver'a.
Евгений Степанищев (bolknote.ru) автор № 24
Комментарий для teplorod.livejournal.com:

Понятно. Возможно сделаю в скором времени, ничего не обещаю.
Евгений Степанищев (bolknote.ru) автор № 25
Комментарий для skurudo.livejournal.com:

Ну и бог с ними :) Я из архива эти файлы вообще убрал :)
skurudo.livejournal.com № 26
Комментарий для Евгения Степанищева:

Можно на «ты». Скуруда не нежный.

Error where found in ZIP file ;-(
Евгений Степанищев (bolknote.ru) автор № 27
Комментарий для skurudo.livejournal.com:

Да, только что перезалил. Не понимаю что случилось с архивом, можно качать.

Мне тут пришла мысль на тему маркировки «ты»-«вы», надо будет реализовать :) Просто забываю с кем на «ты», а с кем на «вы» :)
skurudo.livejournal.com № 28
Комментарий для Евгения Степанищева:

Гм, что-то, и правда, не то с архивом. Пишет о том, что архив поврежден.
Евгений Степанищев (bolknote.ru) автор № 29
Комментарий для skurudo.livejournal.com:

Ещё раз скачай, сейчас всё ок. Если качаешь «Оперой», то зайди в закачки и выбери «скачать ещё раз» («restart transfer»). Оно кеширует, похоже.
alick (alick.ru) № 32
Кстати, а способы установки остались точно такими же, как у Димы? Просто readme в архиве не нашлось.
alick (alick.ru) № 33
И как-то оно странно реагирует на файл data/sites.txt:

Notice: Undefined variable: this in /stat/index.php on line 76
Евгений Степанищев (bolknote.ru) автор № 34
Комментарий для alick.ru:

Способ установки я написал в своём посте.

Гм. А это какая-то ошибка, там не может быть $this.
alick (alick.ru) № 35
Комментарий для Евгения Степанищева:

«Способ установки я написал в своём посте.»
ты про это?
«Инструкция по установке: полностью удаляете „Спесту“, ставите в ту же папку „Спесту 2“, скрипт должен иметь возможность писать в папки data и reports.»

А как быть, если спесты раньше не было?
Евгений Степанищев (bolknote.ru) автор № 36
Комментарий для alick.ru:

Щас допишу. Файл можно скачать заново — надеюсь, я правильно догадался что происходит в том куске кода, файл поправил.
alick (alick.ru) № 37
Комментарий для Евгения Степанищева:

Ошибка исчезла, но ссылки он все-равно криво поставил.
Там формат файла, если не помнишь:
Название1|Урля1
Название2|Урля2
Название3|Урля3

А он генерит:
Название1|Урля1 | Название2|Урля2 | Название3|Урля3

Т.е. забывает про разделитель.
Евгений Степанищев (bolknote.ru) автор № 38
Комментарий для alick.ru:

Инструкцию дописал.

Я не то что не помню, я этого не знаю, никогда этим не пользовался :) А эта фиговина, похоже, имеет свой формат. Впрочем, я уже поправил — сделал поддержку обоих форматов, можно качать заново.
alick (alick.ru) № 39
Комментарий для Евгения Степанищева:

$name ($site$link) — вот эта штука никогда не срабатывает
Евгений Степанищев (bolknote.ru) автор № 40
Комментарий для alick.ru:

Как нет? Только что вписал:

Bolknote|bolknote.ru
Другой сайт|bolk.exler.ru

Сработало.
alick (alick.ru) № 41
Комментарий для Евгения Степанищева:

у меня не срабатывает проверка на strtolower($site) == $current_site
Евгений Степанищев (bolknote.ru) автор № 43
Комментарий для alick.ru:

давайте в аську, утомительно. 2993333
404team.org № 44
Комментарий для Евгения Степанищева:

странная фигня. на локальном компе пашет, на серваке не пускает в админку.
в чем может быть прикол?
404team.org № 46
Комментарий для Евгения Степанищева:

просто не пускает, как при неправильном вводе пароля.
Евгений Степанищев (bolknote.ru) автор № 47
Комментарий для 404team.org:

PHP установлен как модуль? Или как CGI?
404team.org № 48
Комментарий для Евгения Степанищева:

как CGI.
проверил на другом хосте, где стоит как модуль — то же самое.
Евгений Степанищев (bolknote.ru) автор № 49
Комментарий для 404team.org:

Попробуйте выкачать ещё раз, я сделал небольшие правки на случай, если у вас PHP в режиме CGI.
Евгений Степанищев (bolknote.ru) автор № 50
Комментарий для 404team.org:

4ert, russkij otvalilsja v windows.

poprobujte posmotret' 4to u vas v $_SERVER. V file 'auth.inc.php' dobav'te persuju stroku:

echo ''; 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'.
cfyz.livejournal.com № 54
А сколько весит архив? Перекачиваю уже 100й раз (размер всегда 22076) — все время неожиданный конец архива :/
Евгений Степанищев (bolknote.ru) автор № 59
Не понимаю что это за проблема такая, но иногда, после заливки на FTP архив оказывается битым. Перезалил.
splurov.livejournal.com № 57
Комментарий для alick.ru:

Извиняюсь, последний комментарий не читайте, не проснулся ещё :-/
alick (alick.ru) № 58
Комментарий для splurov.livejournal.com:

Угу, баг исправили и он был совсем не в том.
Доброго вам утречка :-)
no-subject (openid.yandex.ru/users/no-subject) № 61
Что-то странное, среди используемых браузеров нет ни одного IE.
Это только у меня такое?
Евгений Степанищев (bolknote.ru) автор № 62
Попробовал зайти локально MSIE, увидел: «Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; WebMoney Advisor; .NET CLR 2.0.50727)»

Так что всё должно работать.
doctor-estet (kvisaz.ru) № 63
Для HTML страниц и WAP/WML страниц также работает способ вставки через IMG

пример
img src= http://site.ru/stats/counter.php
doctor-estet (kvisaz.ru) № 64
Предыдущее сообщение несколько неверно.
Работать работает, но с некоторыми ошибками (в частности неправильно показываются страницы)
teplorod.livejournal.com № 65
Комментарий для Евгения Степанищева:

У меня ощущение, что вот этот способ
<!--#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/counte … ?id=%22%2B
r+»' border=0 width=1 height=1 alt=SpeSta>")</script>

Можно ли вызывать систему статистики как-то похожим на это способом?
teplorod.livejournal.com № 66
Комментарий для Евгения Степанищева:

сорри, не знал, что html-теги совсем не отображаются.
Евгений Степанищев (bolknote.ru) автор № 67
Комментарий для teplorod.livejournal.com:

Не вполне — это как? Что конктретно не работает?
Евгений Степанищев (bolknote.ru) автор № 69
Комментарий для teplorod.livejournal.com:

Как это не работает? Работает «<» и «
ulrith.livejournal.com № 70
Что-то у меня старая спеста с 09.10.2008 перестала правильно считать статистику. Это можно видеть вот здесь: http://eduabroad.ru/stat/?month=10.2008%26 … o%26p=demo
А ведь столько лет прослужила верой-правдой (вот сколько: http://eduabroad.ru/stat/?month=06.2003%29. Что делать, чинить ниасилил, надо ставить новьё. В связи с этим 2 вопроса им один крик боли. Вопросы: 1) у меня тут вот на главстраницо ( http://eduabroad.ru/ ) внизу вылезли всякие данные — как их отключить? В конфиге не нашел. 2) А можно вызвать без php и иклюдов? Способ с Яваскриптом или однопиксельной картинкой не прокатит? (
Евгений Степанищев (bolknote.ru) автор № 72
Комментарий для ulrith.livejournal.com:

Есть. Но мне пока не до «Спесты».

1) не увидел ничего внизу
2) по поводу других способов не знаю, посмотрите на сайте первых разработчиков Spesta2.

Статистики кликов в «Спесте2» не было никогда.
ulrith.livejournal.com № 73
Сорри за анноинг, бат…

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
Евгений Степанищев (bolknote.ru) автор № 75
Комментарий для ulrith.livejournal.com:

Гм… ничего не понимаю. Никогда такого не видел. А место в коде, где это происходит, вы не нашли?
ulrith.livejournal.com № 76
Не-а, не нашёл. Думал так и должно быть для отладки, но отключение соотв. параметра в конфиге ничего не даёт.
Евгений Степанищев (bolknote.ru) автор № 77
Комментарий для ulrith.livejournal.com:

Будет время, попробую поковырять.
ulrith.livejournal.com № 78
Думаю эта штука вылазит потому что я прописал в конфиге свой домашний ip. Как Вам версия?
ulrith.livejournal.com № 82
В конфиг.инк.пхп я прописал:
# База своих ip-адресов, что бы не учитывать их

$cfg['stat']['ip'] = array();

$cfg['stat']['ip'][] = «127.0.0.1»;
$cfg['stat']['ip'][] = «мой айпи»;

И вот поэтому оно мне все это и показывает. Вам ведь этого не видно? Или Вам тоже видно?
ulrith.livejournal.com № 84
Вот! (Торжествуя.) Значиццо оно показывает всю эту фегню только для меня, когда я захожу со своего айпи-адреса. Фух. :-)
Stranger (artconcepts.ru) № 86
Там в counter.inc.php есть проверка, и если ip совпадает с конфигом, то выводится эта инфа, если нет, то плюсуется статистика
Евгений Степанищев (bolknote.ru) автор № 87
Значит это какая-то фича, я не в курсе, я же только патчил баги и дописал функционал, но не являюсь родителем этой версии.
Stranger (artconcepts.ru) № 88
я щас написал себе свою статистику, но уже на базах….

и что самое обидное, на локалхосте работает так же, а на сервере уже где то в 10 раз медленнее. например 0.007 спеста а у меня 0.07. причем если спеста стабильно, то у меня может и 0.5 вылезти…

Всё из-за баз, поскольку алгоритм похожий, тормозят именно запросы. Не знаешь где про оптимизацию запросов почитать?
foxter.livejournal.com № 91
Спасибо огромное. Ваша версия (дополнение, аддон) единственная которая у меня заработала!
Спасибо!
Евгений Степанищев (bolknote.ru) автор № 92
Ну, от совершенства она далека, а допиливать уже не хочется :)