[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фальшивый счетчик
Mikagami
Здравствуйте, уважаемые специалисты. Мне сделать реалистичную накрутку счетчика на сайте. Не сумев найти готовых решений, разработал скрипт сам. К сожалению, есть предчуствие, что мой скрипит кривой и ненадежный, но я пока не знаю оного способа, поэтому обращаюсь за помощью к вам.
Мой вариант, - зациклить php скрипт, который инкриминирует счетчик из базы, потом ждет случайное количество секунд, и так по кругу. А чтобы скрипт при остановке запускался снова, другая функция запускается по крону, раз в 20 мин. Она проверяет, накручивается ли счетчик, если он завис, запускает заново функцию накрутки. Вот основной код:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Counter extends CI_Controller
{

function __construct()// в конструкторе просто снимаем ограничение на выполнение скрипта
{
set_time_limit(0);
}




var $max_time = 30;//Максимальное время паузы



/*Сначала функция проверяет включена ли автонакрутка в настройках(чтобы можно было остановить скрипт).Фунция берет значение счетчика из Mysql, прибавляет к нему единицу. Затем генирируется случайное число от 0 до 30 (количество секунд). Вызывается функция sleep() c этим случайным количеством секунд, после паузы скрипт перекидывает на начало.*/


private function counter()
{
$this->db->where('field', 'on_counter');

$query = $this->db->get('settings');

$result = $query->row_array();

$trigger = $result['value'];// проверяем, включена ли автонакрутка, если нет - стоп скрипт



if ($trigger == TRUE)
{
$query = $this->db->get('counters');

$result = $query->result_array();//берем счетчик из базы

$increment = $result[0]['counter'] + 1;//инкреминируем счетчик



$data['bad_counter'] = $increment;

$this->db->where('id', 1);

$this->db->update('counters', $data);//Обновляем счетчик в базе



$random_time = mt_rand(0, $this->max_time);//генирируем случайное число от 0 до 30

sleep($random_time);//Пауза скрипта на это случайное время

$this->index();
//перикидываем на сачало этого скрипта

}
else
{
echo 'Накрутка отключена';//если в настройках выключена автонакрутка срабатывае это условие
}

}








/* эта функция служит для того чтобы перезапускать функцию counter(), втом случае если она остановится(рестарт сервера, или какие нибудь глюки). Она запускается по CRON раз в 10 мин. Она берет значение счетчика из базы в переменную $qcounter1, ждет 60(на всякий случай удваеваем максимальное время) секунд, еще раз берет значение счетчика из базы в переменную $counter2. Затем переменниы $counter1 и переменная $counter2 сравниваются. Если они равны, значит накрутка зависла и мы запускаем функцию counter() вновь.*/

function off_on()
{





$query = $this->db->get('counters');

$result = $query->result_array();

$counter1 = $result[0]['counter'];//взяли значение счетчика из базы в первую переменную

sleep($bad_max_time * 2);//ждем удвоеное максимальное время

$query = $this->db->get('counters');

$result = $query->result_array();

$counter2 = $result[0]['bad_counter'];//взяли значение счетчика из базы во вторую переменную

if ($counter1 == $counter2)
{
$this->couner();//счетчики равны, значит накрутка не пашет, запускаем накрутку

}
else
{
die();//счетчики не равны, значит накрутка идет, в этом случае просто стоп скрипт
}

}







}

/*end of file*/


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




Спустя 3 часа, 31 минута, 3 секунды (28.02.2011 - 18:58) inpost написал(а):
Mikagami
крон и раз в минуту запускать плюс =)

Спустя 16 минут, 47 секунд (28.02.2011 - 19:14) Mikagami написал(а):
Цитата (inpost @ 28.02.2011 - 15:58)
Mikagami
крон и раз в минуту запускать плюс =)

Спасибо за ответ. Проблема в том, что счетчик должен выглядеть абсолютно реалистично. Я для простоты описал только основной принцип, но в классе еще есть функции, корректирующие скорость инкремента в зависимости от времени суток. В 2 ночи Коэффициент равен 0.2, это в 5 раз медленнее, чем при пиковой посещаемости в 21.00. При запуске по крону раз в минуту такою функциональность реализовать не получится.



А также возникает вопрос, что если инкремент нужно делать чаще, чем раз в минуту?

Спустя 1 час, 12 минут, 20 секунд (28.02.2011 - 20:27) DmitryOpalev написал(а):
Ну так разве нельзя проверять время и следя из этого...?

Спустя 1 минута, 2 секунды (28.02.2011 - 20:28) Snus написал(а):
Mikagami
Зачем тебе фальшивый счетчик? blink.gif

Спустя 25 минут, 56 секунд (28.02.2011 - 20:54) inpost написал(а):
Mikagami
Тогда запускай раз в минуту, но вероятность того, что будет +1 будет 10%, вечером: +30%

Snus
Сеошники дурят заказчиков =)

Спустя 3 минуты, 35 секунд (28.02.2011 - 20:57) Snus написал(а):
inpost
В таком не буду помогать.

Спустя 2 месяца, 4 дня, 20 часов, 22 минуты, 17 секунд (3.05.2011 - 16:19) Anabioz999 написал(а):
Snus
ну а вдруг человеку это очень надо?))
хочешь накрутить счётчик иди на вебсёрф
Быстрый ответ:

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