Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Система статистики «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.

92 комментария
roodz.livejournal.com 2008

Статистика по IP штука нужная — люди таким образом заходы с офисов конкурентов и интерес конкретных клиентов заценяют.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для roodz.livejournal.com:

Мне она не нужна — какие могут быть «офисы конкурентов и интерес клиентов» у меня на блоге?

skurudo (openid.yandex.ru/users/skurudo) 2008

Комментарий для Евгения Степанищева:

PR забавно работает. Показывает 0. А ведь там и правда он должен быть, ведь у страницы статистики нет PR вообще -_-

Евгений Степанищев (bolknote.ru) 2008

Гм… да, я позабыл, что Page Rank он для страницы, а не для сайта, вот чёрт…

skurudo (openid.yandex.ru/users/skurudo) 2008

Комментарий для Евгения Степанищева:

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

Подскажи, пожалуйста, как лечить?

skurudo.livejournal.com 2008

Комментарий для Евгения Степанищева:

http://www.prchecker.info/pagerank-check-button.php  — можно на что-то такое заменить, там как раз для сайта. Генерируется типа уникальная ссылка и можно ставить.

Евгений Степанищев (bolknote.ru) 2008

Поправил это, спасибо!

Евгений Степанищев (bolknote.ru) 2008

Надо поставить права на запись на папки data и reports.

Можно качать новую версию — баг с PR поправил (находится на том же месте, файл называется так же).

skurudo.livejournal.com 2008

Комментарий для Евгения Степанищева:

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

Уже стоят вообще-то.

makoratao.livejournal.com 2008

а что в этой спесте нового вообще есть?

skurudo.livejournal.com 2008

Комментарий для makoratao.livejournal.com:

Читай, друже, изменения у болка и у Аналогов:
http://www.analog-group.ru/projects/spesta2.html

Евгений Степанищев (bolknote.ru) 2008

Комментарий для skurudo.livejournal.com:

А на файлы, которые внутри?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для makoratao.livejournal.com:

Это не новая «Спеста», это другая «Спеста».

skurudo.livejournal.com 2008

Комментарий для Евгения Степанищева:

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 2008

Очень здорово, что Вы это сделали.
Но вот статистики по «кликам» очень нехватает.
Буду очень признателен, если Вы ее все-таки прикрутите.

skurudo.livejournal.com 2008

Комментарий для Евгения Степанищева:

болтикова в Поисковых словах... не понимает utf8? Или это персонально у меня такое? :-)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для skurudo.livejournal.com:

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

А с unicode там смешно — оно его только для google делает, для остальных — нет. Надо доделать, я думаю. А это какой поисковик?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для teplorod.livejournal.com:

Хм… а зачем она, кстати? Может и сделаю, если пойму зачем она.

alick (alick.ru) 2008

! ..\spesta-210.zip: The archive is corrupt

Архив поломатый.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для alick.ru:

Перезалил. Пашет?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для skurudo.livejournal.com:

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

teplorod.livejournal.com 2008

Комментарий для Евгения Степанищева:

Статистика по кликам нужна в двух случаях:

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

Комментарий для Евгения Степанищева:

Будешь смеяться, но ошибка была только с теми отчетами, которые от моего имени создались. Там выше есть список. А отчеты собственно: referers.txt, requests.txt, spiders.txt, words.txt. Удалил в пень. Оно создало заново уже от себя, в смысле от имении wwwserver’a.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для teplorod.livejournal.com:

Понятно. Возможно сделаю в скором времени, ничего не обещаю.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для skurudo.livejournal.com:

Ну и бог с ними :) Я из архива эти файлы вообще убрал :)

skurudo.livejournal.com 2008

Комментарий для Евгения Степанищева:

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

Error where found in ZIP file ;-(

Евгений Степанищев (bolknote.ru) 2008

Комментарий для skurudo.livejournal.com:

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

Мне тут пришла мысль на тему маркировки «ты»-«вы», надо будет реализовать :) Просто забываю с кем на «ты», а с кем на «вы» :)

skurudo.livejournal.com 2008

Комментарий для Евгения Степанищева:

Гм, что-то, и правда, не то с архивом. Пишет о том, что архив поврежден.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для skurudo.livejournal.com:

Ещё раз скачай, сейчас всё ок. Если качаешь «Оперой», то зайди в закачки и выбери «скачать ещё раз» («restart transfer»). Оно кеширует, похоже.

teplorod.livejournal.com 2008

Комментарий для Евгения Степанищева:

Спасибо.

alick (alick.ru) 2008

Комментарий для Евгения Степанищева:

Ага. Пашет.
Спасибо.

alick (alick.ru) 2008

Кстати, а способы установки остались точно такими же, как у Димы? Просто readme в архиве не нашлось.

alick (alick.ru) 2008

И как-то оно странно реагирует на файл data/sites.txt:

Notice: Undefined variable: this in /stat/index.php on line 76

Евгений Степанищев (bolknote.ru) 2008

Комментарий для alick.ru:

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

Гм. А это какая-то ошибка, там не может быть $this.

alick (alick.ru) 2008

Комментарий для Евгения Степанищева:

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

А как быть, если спесты раньше не было?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для alick.ru:

Щас допишу. Файл можно скачать заново — надеюсь, я правильно догадался что происходит в том куске кода, файл поправил.

alick (alick.ru) 2008

Комментарий для Евгения Степанищева:

Ошибка исчезла, но ссылки он все-равно криво поставил.
Там формат файла, если не помнишь:
Название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>

Т. е. забывает про разделитель.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для alick.ru:

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

Я не то что не помню, я этого не знаю, никогда этим не пользовался :) А эта фиговина, похоже, имеет свой формат. Впрочем, я уже поправил — сделал поддержку обоих форматов, можно качать заново.

alick (alick.ru) 2008

Комментарий для Евгения Степанищева:

<a href=’$site$link’><b>$name</b></a> — вот эта штука никогда не срабатывает

Евгений Степанищев (bolknote.ru) 2008

Комментарий для alick.ru:

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

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

Сработало.

alick (alick.ru) 2008

Комментарий для Евгения Степанищева:

у меня не срабатывает проверка на strtolower($site) == $current_site

alick (alick.ru) 2008

Комментарий для Евгения Степанищева:

т. е. у меня там всегда false

Евгений Степанищев (bolknote.ru) 2008

Комментарий для alick.ru:

давайте в аську, утомительно. 2993333

404team.org 2008

Комментарий для Евгения Степанищева:

странная фигня. на локальном компе пашет, на серваке не пускает в админку.
в чем может быть прикол?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для 404team.org:

Подробнее. Что именно происходит?

404team.org 2008

Комментарий для Евгения Степанищева:

просто не пускает, как при неправильном вводе пароля.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для 404team.org:

PHP установлен как модуль? Или как CGI?

404team.org 2008

Комментарий для Евгения Степанищева:

как CGI.
проверил на другом хосте, где стоит как модуль — то же самое.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для 404team.org:

Попробуйте выкачать ещё раз, я сделал небольшие правки на случай, если у вас PHP в режиме CGI.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для 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’.

404team.org 2008

Комментарий для Евгения Степанищева:

большое спасибо. заработало!

acerbial (coprophagous.ru) 2008

Украли проект!!!

no-subject (no-subject.ya.ru) 2008

Поставил, работает как часы. Спасибо!

cfyz.livejournal.com 2008

А сколько весит архив? Перекачиваю уже 100й раз (размер всегда 22076) — все время неожиданный конец архива :/

alick (alick.ru) 2008

Написал в аську небольшой багрепорт.

splurov.livejournal.com 2008

Комментарий для alick.ru:

у меня не срабатывает проверка на strtolower($site) == $current_site

http://php.net/setlocale в помощь

splurov.livejournal.com 2008

Комментарий для alick.ru:

Извиняюсь, последний комментарий не читайте, не проснулся ещё :-/

alick (alick.ru) 2008

Комментарий для splurov.livejournal.com:

Угу, баг исправили и он был совсем не в том.
Доброго вам утречка :-)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для cfyz.livejournal.com:

Не понимаю что это за проблема такая, но иногда, после заливки на FTP архив оказывается битым. Перезалил.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для coprophagous.ru:

Жди «Блоговара 2» с моими патчами ;)

no-subject (openid.yandex.ru/users/no-subject) 2008

Что-то странное, среди используемых браузеров нет ни одного IE.
Это только у меня такое?

Евгений Степанищев (bolknote.ru) 2008

Попробовал зайти локально MSIE, увидел: «Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; WebMoney Advisor; .NET CLR 2.0.50727)»

Так что всё должно работать.

doctor-estet (kvisaz.ru) 2008

Для HTML страниц и WAP/WML страниц также работает способ вставки через IMG

пример
img src= http://site.ru/stats/counter.php

doctor-estet (kvisaz.ru) 2008

Комментарий для kvisaz.ru:

Предыдущее сообщение несколько неверно.
Работать работает, но с некоторыми ошибками (в частности неправильно показываются страницы)

teplorod.livejournal.com 2008

Комментарий для Евгения Степанищева:

У меня ощущение, что вот этот способ
<!-​-​#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>

Можно ли вызывать систему статистики как-то похожим на это способом?

teplorod.livejournal.com 2008

Комментарий для Евгения Степанищева:

сорри, не знал, что html-теги совсем не отображаются.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для teplorod.livejournal.com:

Не вполне — это как? Что конктретно не работает?

teplorod.livejournal.com 2008

< у тебя в комментариях не работает, а я хотел код вызова обсудить.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для teplorod.livejournal.com:

Как это не работает? Работает «<» и «<» показывает равно то, что ты написал — сочетание знаков «<» и «<».

ulrith.livejournal.com 2008

Что-то у меня старая спеста с 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«>) Крик боли: верните статистику кликоф!

ulrith.livejournal.com 2008

А што — тут никого нет? :-0

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ulrith.livejournal.com:

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

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

Статистики кликов в «Спесте2» не было никогда.

ulrith.livejournal.com 2008

Сорри за анноинг, бат...

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

ulrith.livejournal.com 2008

А, понял. В Спесте2 — да, не было. А жаль!

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ulrith.livejournal.com:

Гм… ничего не понимаю. Никогда такого не видел. А место в коде, где это происходит, вы не нашли?

ulrith.livejournal.com 2008

Не-а, не нашёл. Думал так и должно быть для отладки, но отключение соотв. параметра в конфиге ничего не даёт.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ulrith.livejournal.com:

Будет время, попробую поковырять.

ulrith.livejournal.com 2008

Думаю эта штука вылазит потому что я прописал в конфиге свой домашний ip. Как Вам версия?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ulrith.livejournal.com:

Никак :) Куда вы его записали?

ulrith.livejournal.com 2008

В конфиг. Что, непонятно? :-)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ulrith.livejournal.com:

Не пронятно, ага.

ulrith.livejournal.com 2008

В конфиг.инк.пхп я прописал:

База своих ip-адресов, что бы не учитывать их

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

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

И вот поэтому оно мне все это и показывает. Вам ведь этого не видно? Или Вам тоже видно?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ulrith.livejournal.com:

Мне этого не видно.

ulrith.livejournal.com 2008

Вот! (Торжествуя.) Значиццо оно показывает всю эту фегню только для меня, когда я захожу со своего айпи-адреса. Фух. :-)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ulrith.livejournal.com:

А, ну может быть, видимо это фича :)

Stranger (artconcepts.ru) 2009

Там в counter.inc.php есть проверка, и если ip совпадает с конфигом, то выводится эта инфа, если нет, то плюсуется статистика

Евгений Степанищев (bolknote.ru) 2009

Комментарий для artconcepts.ru:

Значит это какая-то фича, я не в курсе, я же только патчил баги и дописал функционал, но не являюсь родителем этой версии.

Stranger (artconcepts.ru) 2009

я щас написал себе свою статистику, но уже на базах....

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

Всё из-за баз, поскольку алгоритм похожий, тормозят именно запросы. Не знаешь где про оптимизацию запросов почитать?

Евгений Степанищев (bolknote.ru) 2009

Комментарий для artconcepts.ru:

Если MySQL, то тут: http://www.mysqlperformanceblog.com/

Stranger (artconcepts.ru) 2009

Спасибо, почитаю ;)

foxter.livejournal.com 2009

Спасибо огромное. Ваша версия (дополнение, аддон) единственная которая у меня заработала!
Спасибо!

Евгений Степанищев (bolknote.ru) 2009

Комментарий для foxter.livejournal.com:

Ну, от совершенства она далека, а допиливать уже не хочется :)