[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Счетчик посетителей on-line
freed-master
Написал такой вот счетчик:
PHP
<?php
if (isset($sid)) {
if (
substr($_SERVER['HTTP_USER_AGENT'], 06) == 'Yandex')        $bot .= 'yandex | '
if (
substr($_SERVER['HTTP_USER_AGENT'], 09) == 'Googlebot')     $bot .= 'google | '
if (
substr($_SERVER['HTTP_USER_AGENT'], 012) == 'StackRambler'$bot .= 'rambler | ';
if (
substr($_SERVER['HTTP_USER_AGENT'], 05) == 'Aport')         $bot .= 'aport | '
if (
substr($_SERVER['HTTP_USER_AGENT'], 07) == 'Mail.Ru')       $bot .= 'mailru | ';
if (
substr($_SERVER['HTTP_USER_AGENT'], 06) == 'MSNBot')        $bot .= 'msnbot | ';
if (isset(
$bot)) { $type "b"; } else { $type "h"; }
mysql_select_db($database_conect$conect);
if (!isset(
$_GET['status'])=="admin") {
mysql_query("INSERT INTO counters VALUES('on', '".$ip."', '".$sid."', NOW(),  NOW(), '".$brouser."', '".$from."', '".$type."') ON DUPLICATE KEY UPDATE `line`='on', `time`=NOW(), `sid`='".$sid."'") or die(mysql_error());
mysql_query("UPDATE counters SET `line`='off' WHERE `time` < NOW() - INTERVAL '1' MINUTE AND `sid`!='".$sid."'") or die(mysql_error());
} else {
mysql_query("INSERT INTO counters VALUES('', 'admin', '".$sid."', NOW(),  NOW(), '', '', 'a') ON DUPLICATE KEY UPDATE `sid`='".$sid."'") or die(mysql_error());
mysql_query("UPDATE counters SET `line`='off' WHERE `time` < NOW() - INTERVAL '1' MINUTE") or die(mysql_error());
}}
Работает хорошо, но зная свою неграмотность в php хотелось бы услышать ваше мнение. Что я тут сделал не так как нужно было бы?



Спустя 14 минут, 13 секунд (16.06.2009 - 22:29) sergeiss написал(а):
1. Ты добавляешь к переменной $bot - а где она изначально объявлена?
Тут лучше объявить массив $bot=array(), и затем добавлять так: $bot[]='yandex'; $bot[]='google'. А потом, в конце, соберешь массив в строку через implode, с нужным разделителем.
2. У тебя нету проверки на то, что коннект к базе был успешный. А вдруг ошибка? А скрипт об этом не знает. И будет пытаться сделать запрос.

Спустя 3 минуты, 29 секунд (16.06.2009 - 22:32) FatCat написал(а):
Цитата (freed-master @ 16.06.2009 - 23:15)
if (substr($_SERVER['HTTP_USER_AGENT'], 0, 6) == 'Yandex')

Я бы сделал:
PHP
if (stristr($_SERVER['HTTP_USER_AGENT'], 'Yandex'))

Спустя 8 минут, 5 секунд (16.06.2009 - 22:40) freed-master написал(а):
Огромное спосибо, обязательно учту ваши рекомендации!

Спустя 1 день, 15 часов, 1 минута, 40 секунд (18.06.2009 - 13:42) ИНСИ написал(а):
этот код:
PHP
if (substr($_SERVER['HTTP_USER_AGENT'], 0, 6) == 'Yandex')        $bot .= 'yandex | '; 
if 
(substr($_SERVER['HTTP_USER_AGENT'], 0, 9) == 'Googlebot')     $bot .= 'google | '; 
if 
(substr($_SERVER['HTTP_USER_AGENT'], 0, 12) == 'StackRambler') $bot .= 'rambler | ';
if (substr($_SERVER['HTTP_USER_AGENT'], 0, 5) == 'Aport')         $bot .= 'aport | '; 
if 
(substr($_SERVER['HTTP_USER_AGENT'], 0, 7) == 'Mail.Ru')       $bot .= 'mailru | ';
if (substr($_SERVER['HTTP_USER_AGENT'], 0, 6) == 'MSNBot')        $bot .= 'msnbot | ';


я бы заменил на:

PHP
$bot = array();
    if (substr($_SERVER['HTTP_USER_AGENT'], 'Yandex'))            { $bot[] .= 'yandex'; }
    else if (substr($_SERVER['HTTP_USER_AGENT'], 'Googlebot'))    { $bot[] .= 'google'; }
    else if (substr($_SERVER['HTTP_USER_AGENT'],'StackRambler'))  { $bot[] .= 'rambler'; }
    else if (substr($_SERVER['HTTP_USER_AGENT'], 'Aport'))        { $bot[] .= 'aport'; }
    else if (substr($_SERVER['HTTP_USER_AGENT'], 'Mail.Ru'))      { $bot[] .= 'mailru'; }
    else if (substr($_SERVER['HTTP_USER_AGENT'], 'MSNBot'))       { $bot[] .= 'msnbot'; }

Спустя 31 минута, 52 секунды (18.06.2009 - 14:14) sergeiss написал(а):
welbox2 - этот вариант был уже предложен в этой же теме, 2 дня тому назад smile.gif
И, замечу, если уж использовать массив, то при назначении не надо делать разделители никакие. Их потом лучше будет получить. Иначе в самом конце строки будет стоять ненужный разделитель.

Спустя 6 минут, 54 секунды (18.06.2009 - 14:21) freed-master написал(а):
Цитата
я бы заменил на:

Цитата
И, замечу, если уж использовать массив, то при назначении не надо делать разделители никакие
Да, я все так и переделал!

Спустя 16 секунд (18.06.2009 - 14:21) gooder отдыхающий написал(а):
надо бесконечные substr и stristr заменить на массивы и циклы
читайте...

Спустя 9 минут, 43 секунды (18.06.2009 - 14:31) freed-master написал(а):
Цитата
надо бесконечные substr и stristr заменить на массивы и циклы

А чем массивы лучше?

Спустя 7 минут, 39 секунд (18.06.2009 - 14:39) gooder отдыхающий написал(а):
freed-master
вы нормальный человек?
чем меньше кода лучше, чем больше кода?

Спустя 16 минут, 57 секунд (18.06.2009 - 14:55) twin написал(а):
Цитата
чем меньше кода лучше, чем больше кода?

Смотря какой заказчик biggrin.gif

Спустя 2 минуты, 34 секунды (18.06.2009 - 14:58) twin написал(а):
Цитата
А чем массивы лучше?

Массив не лучше. Он специально для этого придуман. Чтобы гвозди забивать молотком, а не зубочисткой.

Спустя 1 минута, 34 секунды (18.06.2009 - 15:00) freed-master написал(а):
Понятно, спасибо, исправлюсь smile.gif

Спустя 6 часов, 29 минут, 39 секунд (18.06.2009 - 21:29) ИНСИ написал(а):
Цитата (sergeiss @ 18.06.2009 - 11:14)
welbox2 - этот вариант был уже предложен в этой же теме, 2 дня тому назад smile.gif
И, замечу, если уж использовать массив, то при назначении не надо делать разделители никакие. Их потом лучше будет получить. Иначе в самом конце строки будет стоять ненужный разделитель.

спасибо что сказал про разделители, не обратил внимание =)))) спасибо!

а по поводу того, что уже размещено было 2 дня назад, извини, но я не вижу код сверху такой же как мой, единственное, то что ты посоветовал сделать то, что я сделал =))) и немноо улучшил код использовав else if =))))

Спустя 5 дней, 17 минут, 47 секунд (23.06.2009 - 21:47) freed-master написал(а):
Что-то с массивами никак не подружусь.

Подскажите пожалуйста как вывести на экран название бота, находящегося сейчас на сайте.

Свернутый текст
PHP
$engines = array(
array(
'Aport', 'Aport'),
array(
'Google', 'Google'),
array(
'msnbot', 'MSN'),
array(
'Rambler', 'Rambler'),
array(
'Yahoo', 'Yahoo'),
array(
'Yandex', 'Yandex') 
);
Как вообще это делается? Пытался вывести весь массив с помощью extract($engines), но увы... пишет: First argument should be an array, а чем это не массив $engines?

Спустя 20 минут, 36 секунд (23.06.2009 - 22:08) glock18 написал(а):
строку на которой пишет? покажешь, или как?

Спустя 8 минут, 47 секунд (23.06.2009 - 22:16) freed-master написал(а):
Собственно вот:
PHP
echo extract($engines);

Спустя 16 минут, 26 секунд (23.06.2009 - 22:33) glock18 написал(а):
возможно два варианта:
1. либо ты даешь не тот код, который надо.
2. либо ошибки нет.

потому что таких чудес не бывает smile.gif

Спустя 7 минут, 57 секунд (23.06.2009 - 22:41) freed-master написал(а):
PHP
function DetectSearchEngine($USER_AGENT) {
$engines = array(
array(
'Aport', 'Aport'),
array(
'Google', 'Google'),
array(
'msnbot', 'MSN'),
array(
'Rambler', 'Rambler'),
array(
'Yahoo', 'Yahoo'),
array(
'Yandex', 'Yandex') );

foreach ($engines as $engine) { if (strstr($USER_AGENT, $engine[0])) { return($engine[1]); } } return (false); }

echo extract($engines);

Спустя 6 минут, 32 секунды (23.06.2009 - 22:47) glock18 написал(а):
PHP
function DetectSearchEngine($USER_AGENT)
{
  
$engines = array(
    array(
'Aport''Aport'),
    array(
'Google''Google'),
    array(
'msnbot''MSN'),
    array(
'Rambler''Rambler'),
    array(
'Yahoo''Yahoo'),
    array(
'Yandex''Yandex') );

  foreach (
$engines as $engine)
  {
    if (
strstr($USER_AGENT$engine[0]))
    {
      return(
$engine[1]);
    }
  }
  return (
false);
}

echo 
extract($engines);

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

Спустя 6 минут, 55 секунд (23.06.2009 - 22:54) freed-master написал(а):
В смысле надо сделать как-то так:
PHP
function DetectSearchEngine($USER_AGENT)
{
  
$engines = array(
    array(
'Aport''Aport'),
    array(
'Google''Google'),
    array(
'msnbot''MSN'),
    array(
'Rambler''Rambler'),
    array(
'Yahoo''Yahoo'),
    array(
'Yandex''Yandex') );

  foreach (
$engines as $engine)
  {
    if (
strstr($USER_AGENT$engine[0]))
    {
      return(
$engine[1]);
    }
  }
  return (
false);
  
$q extract($engines);
}

echo 
$q;

Спустя 12 минут, 58 секунд (23.06.2009 - 23:07) glock18 написал(а):
в смысле надо выучить области видимости переменных.

это так просто. тем более, что ты классы пока не используешь.

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

PS: больше не гадай, ок? я больше отвечать на подобные сообщения не буду. просто почитай что я сказал, и все.

Спустя 38 минут, 56 секунд (23.06.2009 - 23:46) freed-master написал(а):
Хорошо!

Спустя 9 часов, 18 минут, 34 секунды (24.06.2009 - 09:05) gooder отдыхающий написал(а):
зачем ты extract делаешь?
тебе надо вывести, какой это бот?

Спустя 4 дня, 11 часов, 27 минут, 16 секунд (28.06.2009 - 20:32) freed-master написал(а):
Будет ли это рабоать?
PHP
$bots = array('Aport','Google','msnbot''Rambler''Yahoo''Yandex');

foreach (
$bots as $val)
{
  if (
$_SERVER['HTTP_USER_AGENT'] == $val) echo $val;
}

Спустя 28 минут, 54 секунды (28.06.2009 - 21:01) glock18 написал(а):
лучший способ это проверить... это проверить это на деле smile.gif

Спустя 3 минуты, 55 секунд (28.06.2009 - 21:05) freed-master написал(а):
Но как я узнаю... если он ничего не показывает это или боты не заходят или не работает? И сколько ждать?

Спустя 1 час, 24 минуты, 37 секунд (28.06.2009 - 22:29) glock18 написал(а):
ну если useragent ботов один в один как твои, то должно работать


_____________
Всем, кто заинтересован, могу помочь начать зарабатывать на forex.
Пишите в личку или на e-mail: flash-dirt@yandex.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.