Как сделать фейковое кол-во скачиваний на странице загрузки?

12 3
W
На сайте с 14.11.2012
Offline
41
1700

У меня есть сайт пот download-трафик. Хочу на странице загрузки файла выводить фейковое кол-во скачиваний для увеличения конверсии. На сайте установлен движок zFiles написанный на php 5.4. Подскажите, пожалуйста, как на php сгенерировать рандомное число от 100 - 500 и выводить его в элемент списка <li>.

Вот часть кода, которая отвечает за вывод на странице реальное кол-во скачиваний

<li class="list-group-item">

<span>

<i style="font-size:18px;" class="fa fa-download"></i> Downloaded |

</span>

{{ $data['fileDownloadCounter'] }}

</li>

И еще бы желательно, после обычного обновления страницы браузера (F5) значения у посетителя сайта не изменялись. То есть, чтобы пользователь случайно обновив страницу не увидел бы, что 367 скачиваний, вдруг стали 141.

Ragnarok
На сайте с 25.06.2010
Offline
239
#1

widgin, ну так найдите количество скачиваний файла в базе и обновите там

//TODO: перестать откладывать на потом
W
На сайте с 14.11.2012
Offline
41
#2
Ragnarok:
widgin, ну так найдите количество скачиваний файла в базе и обновите там

Не, это неудобно. Я в день загружаю минимум по 100 файлов, замучаюсь править каждый. К тому же в админке мне нужна реальная статистика скачивания файлов. Мне бы автоматическую генерацию, которая бы не задевала настоящую статистику и отображалась бы только на странице скачивания файла для посетителей сайта.

danforth
На сайте с 18.12.2015
Offline
153
#3

{{ round($data['fileDownloadCounter'] * 4.5167)}}

Умножайте на какое-то дробное число реальное количество скачиваний и потом округляйте. Если будете умножать на целое - будет не реалистично (всегда кратное).

Junior Web Developer
W
На сайте с 14.11.2012
Offline
41
#4
danforth:
{{ round($data['fileDownloadCounter'] * 4.5167)}}
Умножайте на какое-то дробное число реальное количество скачиваний и потом округляйте. Если будете умножать на целое - будет не реалистично (всегда кратное).

Спасибо, но наверно не вариант опираться на реальные скачивания. Ведь после загрузки каждый файл не сразу набирает реальные скачивания. Кому как повезет) И соответственно у части файлов скачиваний 0. Да и мне бы генерацию значений в диапазоне от 100 до 500.

[Удален]
#5

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

Т.е. например файл: "Кинофильм Выживший", добавленный 20 февраля 2016

Будет:

Длина строки: 18

Некоторая константа: 50

Количество прошедших минут: 39600

Итого: 18 * 50 + 39600 = 40500

Будет увеличиваться во времени и стартанет не с нуля, и рандом не нужен.

W
На сайте с 14.11.2012
Offline
41
#6
imagine:
Возьмите некоторую постоянную базу, например название файла ( скажем количество букв ), умножьте на некоторую постоянную и прибавьте сколько-то минут от времени его добавления.

Т.е. например файл: "Кинофильм Выживший", добавленный 20 февраля 2016
Будет:
Длина строки: 18
Некоторая константа: 50
Количество прошедших минут: 39600

Итого: 18 * 50 + 39600 = 40500
Будет увеличиваться во времени и стартанет не с нуля, и рандом не нужен.

Я сам такое написать точно не смогу. Да и должен быть способ попроще. Возможно на php не так уж и сложно пишется генерация чисел в определенном диапазоне, хотя может я и ошибаюсь. Кто бы подсказал как это сделать.

ДП
На сайте с 23.11.2009
Offline
203
#7
widgin:
Я сам такое написать точно не смогу. Да и должен быть способ попроще. Возможно на php не так уж и сложно пишется генерация чисел в определенном диапазоне, хотя может я и ошибаюсь. Кто бы подсказал как это сделать.

У вас есть, с вашей точки зрения небольшое, но по реализации проблемное условие - после перезагрузки человеку показывать то же самое количество скачиваний. Из-за этого задачка не становится тривиальной. Ваш вариант в генерацией случайного числа в диапазоне не выполняет это условие.

Тут два варианта - либо сделать квази-случайное число (и даже в одном варианте растущее) и показывать его всем, либо придумывать каждому своё число - но тогда хранить его для каждого посетителя (что очевидно сложнее).

S
На сайте с 13.10.2014
Offline
171
#8

Вот такой вот хитрый счетчик вам написал

генерит рандомное кол-во скачиваний

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

кол-во скачиваний привязано к времеи отсутствия пользователя

например если он отсутствовал два дня, а у вас стоит итератор 500 скачиваний в день, то кол-во "качек" может увеличиться на 0-1000

если 2 часа, то на 0-11


<!-- begin smart counter -->
<?php
// местонахождение сервера
// можно не указывать, если в настройках сервера это есть
date_default_timezone_set ('Europe/Moscow');

if (empty($_COOKIE["dCount"]))
{
// если это новопользователь
// генерим куку с рандомным значением от 200 до 1000 и сохраням у пользователья
// чтобы небыло такого, что при каждом релоаде новое значение

$dCount = array(
'downloads' => ceil(rand(200,1000)), // кука
'time' => time() // дата создания
);
$cookie = base64_encode(serialize($dCount));
$expires = date("m/d/Y H:i", strtotime('+365 days') ); // время жизни куки в днях
}
else
{
// кука есть, то значит человек заходил в течении месяца
// показываем ему другое рандомное значение, которое больше предыдущего

// генерим новую куку с учетом кол-ва времени, который пользователь отсутствовал
$max_dpd = 86400; //максимальное кол-во скачиваний в день 86400 = макс 1 скачивание в секунду, но кмк надо ставить реальную цифру, например 96
$dCount = unserialize(base64_decode($_COOKIE["dCount"]));
$dayLeft = (time() - $dCount['time'])/(60*60*24); // кол-во дней прошедших с момента последней "загрузки"
$downloads = $dCount['downloads']; // сохраненное кол-во "загрузок".
$delta = $dayLeft * $max_dpd; // максимальное число, на которое может увеличиться счетчик

$dCount = array(
'downloads' => ceil(rand($downloads,$downloads + $delta)), // кука
'time' => time() // дата обновления
);

$cookie = base64_encode(serialize($dCount));
$expires = date("m/d/Y H:i", strtotime('+365 days') ); // время жизни куки в днях
}

print 'Скачиваний: '. $dCount['downloads'];

?>

<!-- так как мы не можем использовать php функцию setcookie, т.к она должна вызываться до начала вывода данных в браузер, то задействуем вот такой финт ушами -->
<script type="text/javascript" >
document.cookie = "dCount=<?php print $cookie; ?>; expires=<?php print $expires; ?>";
</script>

<!-- //end smart counter -->

W
На сайте с 14.11.2012
Offline
41
#9
silicoid:
Вот такой вот хитрый счетчик вам написал
генерит рандомное кол-во скачиваний
но чтобы юзверь не прочухал записывает ему в куку кол-во скачиваний, а потом при каждом его заходе добавляет какое-то кол-во скачиваний еще.

кол-во скачиваний привязано к времеи отсутствия пользователя
например если он отсутствовал два дня, а у вас стоит итератор 500 скачиваний в день, то кол-во "качек" может увеличиться на 0-1000
если 2 часа, то на 0-11



<!-- begin smart counter -->
<?php
// местонахождение сервера
// можно не указывать, если в настройках сервера это есть
date_default_timezone_set ('Europe/Moscow');

if (empty($_COOKIE["dCount"]))
{
// если это новопользователь
// генерим куку с рандомным значением от 200 до 1000 и сохраням у пользователья
// чтобы небыло такого, что при каждом релоаде новое значение

$dCount = array(
'downloads' => ceil(rand(200,1000)), // кука
'time' => time() // дата создания
);
$cookie = base64_encode(serialize($dCount));
$expires = date("m/d/Y H:i", strtotime('+365 days') ); // время жизни куки в днях
}
else
{
// кука есть, то значит человек заходил в течении месяца
// показываем ему другое рандомное значение, которое больше предыдущего

// генерим новую куку с учетом кол-ва времени, который пользователь отсутствовал
$max_dpd = 86400; //максимальное кол-во скачиваний в день 86400 = макс 1 скачивание в секунду, но кмк надо ставить реальную цифру, например 96
$dCount = unserialize(base64_decode($_COOKIE["dCount"]));
$dayLeft = (time() - $dCount['time'])/(60*60*24); // кол-во дней прошедших с момента последней "загрузки"
$downloads = $dCount['downloads']; // сохраненное кол-во "загрузок".
$delta = $dayLeft * $max_dpd; // максимальное число, на которое может увеличиться счетчик

$dCount = array(
'downloads' => ceil(rand($downloads,$downloads + $delta)), // кука
'time' => time() // дата обновления
);

$cookie = base64_encode(serialize($dCount));
$expires = date("m/d/Y H:i", strtotime('+365 days') ); // время жизни куки в днях
}

print 'Скачиваний: '. $dCount['downloads'];

?>

<!-- так как мы не можем использовать php функцию setcookie, т.к она должна вызываться до начала вывода данных в браузер, то задействуем вот такой финт ушами -->
<script type="text/javascript" >
document.cookie = "dCount=<?php print $cookie; ?>; expires=<?php print $expires; ?>";
</script>

<!-- //end smart counter -->

Ничего себе, спасибо вам огромное. Сейчас попробую использовать код. Мне только не совсем понятно как полученное число вывести в элемент списка <li>, вместо {{ $data['fileDownloadCounter'] }} вставить весь код? Подскажите, пожалуйста.

S
На сайте с 13.10.2014
Offline
171
#10
widgin:
вставить весь код?

хороший вопрос. Откровенно говоря даже не знаю.

надо спросить у тех, кто знаком с шаблонизатором.

возможно, если заменить <?php код ?> На {{ код }} то будет работать

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий