Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Новая версия счётчика PowerCounter 2.3
 
 автор: cheops   (11.04.2005 в 10:58)   письмо автору
 
 

В разделе downloads размещена новая версия счётчика PowerCounter 2.3.0. Особенностью этой версии является
1) Ввод, нового робота поисковой системы MSN (Спасибо Loki :)
2) Исправлена кодировка поисковых запросов Google
3) Устранены небольшие ошибки (недоучёт посетителей с операционной системой Macintosh, не отображение числа хитов в почасовой динамике для поисковых запросов с MSN и Mail.ru)

http://www.softtime.ru/info/powercounter20.php

   
 
 автор: Loki   (11.04.2005 в 17:49)   письмо автору
 
   для: cheops   (11.04.2005 в 10:58)
 

Робот MSN оказался не так прост: сегодня заходил его младшый братец
Microsoft URL Control - 6.00.8169
Так что может мы еще хлебнем его многоликости:(

   
 
 автор: cheops   (11.04.2005 в 22:03)   письмо автору
 
   для: Loki   (11.04.2005 в 17:49)
 

Мда... а вообще кто-нибудь этот поисковик видел, он хоть рабоает?

   
 
 автор: Loki   (11.04.2005 в 23:11)   письмо автору
 
   для: cheops   (11.04.2005 в 22:03)
 

Я заходил попробовать - ищет неплохо, все ссылки что выдавал были довольно свежие и релевантность неплохая. Другой вопрос что ссылок могло быть и поболе. Но я - лабораторная крыса, а ни одного юзера, пользующегося им, в дикой природе я не встречал:)

   
 
 автор: Loki   (12.04.2005 в 20:59)   письмо автору
 
   для: Loki   (11.04.2005 в 23:11)
 

ХО! У меня сегодня первый "дикий" переход с мелкософтовского поисковика... текст запроса в юникоде.

   
 
 автор: cheops   (12.04.2005 в 21:59)   письмо автору
 
   для: Loki   (12.04.2005 в 20:59)
 

К нам стабильно пару человек в день (из 1000) заходит - ищут только "договор о сотрудничестве" и "договор о намерениях", т.е. либо пользователи, либо поисковик повёрнут на деловую почву :)))
Да у него запрос практически точная копия Google (текущая версия 2.3.0 их корректно расшифровывает).

   
 
 автор: Loki   (12.04.2005 в 22:17)   письмо автору
 
   для: cheops   (12.04.2005 в 21:59)
 

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

Кстати, вы точку входа посмотрели? Напоминаю, зная вашу забывчивость:)

Поанализировал свои странички - теперь знаю какие именно надо "подтягивать". Жаль мне не удалось реализовать показ страниц с нулевым рейтингом. Надеюсь на ваш совет.

   
 
 автор: cheops   (12.04.2005 в 22:55)   письмо автору
 
   для: Loki   (12.04.2005 в 22:17)
 

А вы просто в файле searchquery.php замените у Google и MSN строку
<?php
          
if(strpos($ip['name'],"UTF-8")!=null$tmpstr utf8_win($query[1]);
          else 
$tmpstr $query[1];
?>

на
<?php
          $tmpstr 
utf8_win($query[1]);
?>

Там в двух местах, для одного поисковика и для всех вкупе в конце файла.

PS Точку входа не посмотрел :))) у меня завтра спокойный день - не в разбегах, а весь день за машиной - вот и посмотрю.

   
 
 автор: Loki   (13.04.2005 в 00:22)   письмо автору
 
   для: cheops   (12.04.2005 в 22:55)
 

Если там все правильно, то можно к этому отчету и точку выхода будет прикрутить - отличается только одним параметром sql запроса:)

   
 
 автор: human   (14.04.2005 в 13:45)   письмо автору
 
   для: cheops   (12.04.2005 в 22:55)
 

Эта функция utf8_win - достаточно громоздка и делает много лишней работы ( 72 раза запускается сканирование строки ).

Конвертировать из UTF-8 в кириллицу можно еще и более простым способом (всего две строчки) :

$str = iconv("UTF-8","ISO-8859-5",$str);
$str = convert_cyr_string ($str, "i", "w");

   
 
 автор: cheops   (14.04.2005 в 23:02)   письмо автору
 
   для: human   (14.04.2005 в 13:45)
 

Библиотека iconv, к сожалению не на всех серверах стоит :((( Если бы сейчас везде был PHP 5, где она входит в ядро, тогда бы забот не было.

   
 
 автор: human   (15.04.2005 в 08:28)   письмо автору
 
   для: cheops   (14.04.2005 в 23:02)
 

Ну да, именно поэтому в новой (очень толстой) книжке уважаемых авторов ( про PHP5 !!! ) приведен текст этой функции из 72-х строчек str_replace()... :-)

Проверить, установлена ли на сервере библиотека iconv очень просто: выполнить phpinfo и поискать табличку с заголовком iconv, содержащую строчку "iconv support enabled"

Но даже если этой библиотеки нет почему-то на сервере - ничто не мешает использовать ее на локальном.
Для Windows эта библиотека называется iconv.lib и она есть в PHP4.
Хотя с ее подключением есть некоторые хитрости (впрочем, возможно, что про это где-то уже написано, но мне пришлось поразбираться, о чем и расскажу).

В php.ini нужно раскомментировать строчку "extension=php_iconv.dll"
Но оказывается, что этого недостаточно. PHP будет ругаться, что не может найти
файл php_iconv.dll, хотя такой файл на самом деле есть в каталоге php\extension .

Для полноты счастья нужно еще скопировать из каталога php\dlls файл iconv.dll
в системный каталог Windows (обычно это SYSTEM32).

Ну вот, теперь можно читать тексты даже на японском языке...:-)
Не говоря уж о всем знакомых строчках, наполовину состоящих из буквы "Р" .

   
 
 автор: Олег   (15.04.2005 в 10:06)   письмо автору
 
   для: human   (15.04.2005 в 08:28)
 

Люди счетчик отличный но имеет очень существенный недостаток !!!
Сделайте раздел ссылающиеся страницы, чтоб можно было глянуть кто и с какой страницы пришол ссылку на ту страницу. Допустим если с яндекса то ссылка ведет на определенный запрос с которого к вам пришли, вобщем такая очень полезная функция есть в HotLog если вы это добавите то цены вашему счетчику не будет !!! :)

   
 
 автор: Loki   (15.04.2005 в 16:03)   письмо автору
 
   для: Олег   (15.04.2005 в 10:06)
 

Замените в файле searchquery.php конструкцию switch следующим образом:

<?
switch($srch)
    {
      case 
'yandex':
      {
        while(
$ip mysql_fetch_array($qwr))
        {
          
eregi("text=([^&]*)"$ip['name']."&"$query); 
          if(
strpos($ip['name'],"yandpage")!=null)
            echo 
"<tr>
                    <td><a href='"
.$ip['name']."' target=_blank>".convert_cyr_string(urldecode($query[1]),"k","w")."</a></td>
                    <td>Yandex</td>
                    <td>"
.$ip['putdate']."</td>";
          else
            echo 
"<tr>
                    <td><a href='"
.$ip['name']."' target=_blank>".$query[1]."</a></td>
                    <td>Yandex</td>
                    <td>"
.$ip['putdate']."</td>";
          
print_ip($ip['ip'],$begin,$end);
          echo 
"<td><a href=http://".$_SERVER["SERVER_NAME"].$ip['url'].">
               "
.$ip['name']."</a></td></tr>";
        }
        break;
      }
      case 
'rambler':
      {
        while(
$ip mysql_fetch_array($qwr))
        {
          
eregi("words=([^&]*)"$ip['name']."&"$query); 
          echo 
"<tr>
                  <td><a href='"
.$ip['name']."' target=_blank>".$query[1]."</a></td>
                  <td>Rambler</td>
                  <td>"
.$ip['putdate']."</td>";
          
print_ip($ip['ip'],$begin,$end);
          echo 
"<td><a href=http://".$_SERVER["SERVER_NAME"].$ip['url'].">
               "
.$ip['name']."</a></td></tr>";
        }
        break;
      }
      case 
'google':
      {
        while(
$ip mysql_fetch_array($qwr))
        {
          
eregi("q=([^&]*)"$ip['name']."&"$query); 
          if(
strpos($ip['name'],"UTF-8")!=null$tmpstr utf8_win($query[1]);
          else 
$tmpstr $query[1];
          echo 
"<tr><td><a href='".$ip['name']."' target=_blank>".$tmpstr."</a></td><td>Google</td><td>".$ip['putdate']."</td>";
          
print_ip($ip['ip'],$begin,$end);
          echo 
"<td><a href=http://".$_SERVER["SERVER_NAME"].$ip['url'].">
               "
.$ip['name']."</a></td></tr>";
        }
        break;
      }
      case 
'aport':
      {
        while(
$ip mysql_fetch_array($qwr))
        {
          
eregi("r=([^&]*)"$ip['name']."&"$query); 
          echo 
"<tr><td><a href='".$ip['name']."' target=_blank>".$query[1]."</a></td><td>Aport</td><td>".$ip['putdate']."</td>";
          
print_ip($ip['ip'],$begin,$end);
          echo 
"<td><a href=".$_SERVER["SERVER_NAME"].$ip['url'].">
               "
.$ip['name']."</a></td></tr>";
        }
        break;
      }
      case 
'total':
      {
        while(
$ip mysql_fetch_array($qwr))
        {
          if(
$ip['searches'] == "yandex")
          {
            
eregi("text=([^&]*)"$ip['name']."&"$query); 
            if(
strpos($ip['name'],"yandpage")!=null)
              
$query[1] = convert_cyr_string(urldecode($query[1]),"k","w");
          }
          if(
$ip['searches'] == "rambler"eregi("words=([^&]*)"$ip['name']."&"$query); 
          if(
$ip['searches'] == "aport")  eregi("r=([^&]*)"$ip['name']."&"$query); 
          if(
$ip['searches'] == "google")
          {
            
eregi("q=([^&]*)"$ip['name']."&"$query); 
            if(
strpos($ip['name'],"UTF-8")!=null$query[1] = utf8_win($query[1]);
          }
          echo 
"<tr><td><a href='".$ip['name']."' target=_blank>".$query[1]."</a></td><td>".$ip['searches']."</td><td>".$ip['putdate']."</td>";
          
print_ip($ip['ip'],$begin,$end);
          echo 
"<td><a href=http://".$_SERVER["SERVER_NAME"].$ip['url'].">
          "
.$ip['name']."</a></td></tr>";
        }
        break;
      }
    } 
// Конец оператора switch
?>

И вашему счетчику не будет цены;)

   
 
 автор: Loki   (23.04.2005 в 00:59)   письмо автору
 
   для: Loki   (15.04.2005 в 16:03)
 

Наконец-то дошли руки до программирования:)
Из отловленных в вашем варианте счетчика блох:
1. в условии

      if(strpos($useragent, "Macintosh")!== false
      || strpos($useragent, "PowerPC") $os = 'macintosh';

Пропущена закрывающая скобка. Файл count.php

2. Что касается новых поисковиков: во многих местах, переменные прописаны, а вывода их на экран - нет. Уже не припомню все места, но файлы searchhours и searchdays - железно.

3. В файле utils.php в двух местах стоит заглушка

  // Во избежание деления на 0 проверяем значение общего $total
  if($total == 0) $total = 1;

Видимо, была идея отображать проценты, но этот фрагмент так и не задействован, а на корректное отображение данных влияет.

4. Тут я сам не очень понимаю: в переключателе case 'total': нет условия if($ip['searches'] == "msn"). На самом деле работает и без него, но меня смущает то, что остальные поисковики присутствуют.

В общем, это то, что отложилось в голове. Было и еще что-то, но более мелкое и незначительное.

Ушел переделывать форум:)

   
 
 автор: cheops   (23.04.2005 в 11:14)   письмо автору
 
   для: Loki   (23.04.2005 в 00:59)
 

1. Ага было такое дело, уже давно поправил.
2. Буду смотреть.
3. Ну эту перестраховку пользователь невооружённым взглядом увидит, так как все остальные будут 0, боюсь править чтобы хуже не было.
4. Он вместе с Google выводится if(($ip['searches'] == "google") || ($ip['searches'] == "msn"))

   
 
 автор: cheops   (23.04.2005 в 11:48)   письмо автору
 
   для: Loki   (23.04.2005 в 00:59)
 

2. Поправил.

   
 
 автор: Loki   (23.04.2005 в 22:38)   письмо автору
 
   для: cheops   (23.04.2005 в 11:48)
 

Сегодня мне яндекс рефферера в юникоде выплюнул... похоже, скоро придется конвертировать запросы от всех поисковиков...

   
 
 автор: cheops   (24.04.2005 в 13:18)   письмо автору
 
   для: Loki   (23.04.2005 в 22:38)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования