php и таймер
Есть счетчик скачиваний файла. Значения счетчика хранится в файле.
Необходимо:
Каждый час прибавлять указанное, например "5", значение к итоговой сумме скачиваний.
Как реализовать функцию добавления значения каждый час я не смог придумать.
Подскажите, пожалуйста.
$cur_time=time(); // Текущее время при запуске скрипта
$diff = $cur_time - $start_time; // разница времени в секундах
$diff = round ($diff / 3600); // теперь в часах
$count= $diff * 5; // указываем значение счётчика часы умножая на 5.
/* тут код работы с файлом для записи значения */
PROFIT!!!
Не у всех есть крон, да и не всегда он нужен. Можно и имея только PHP и более-менее посещаемый сайт симитировать что-то вроде крона.
Типа такого:
1. имеем файл, куда пишется счётчик: counter.txt.
2. при запросе страницы (любой) с сервера, проверяем filemtime() этого файл.
3. ежели time() - filemtime() > 3600 - запускаем процедуру под "кроном" - увеличиваем счётчик или ещё что.
- Желательно залочить flock()'ом файл, но он не работает в винде, так что лучше просто сразу сделать touch("counter.txt"), дабы процесс не запустился дважды, пока не закончится текущий.
4. ждём следующего юзера...
Правда, если посещаемость большая, то лучше в условие тогда добавить что-то типа rand(1,100) == 1. Ну т.е. чтобы не при каждом обращении дергать файл, но это имеет смысл только при большой посещаемости.
Не обязательно бесплатный хостинг. ИМХО, простые задачи быстрее и менее ресурсозатратно делать через скрипт сайта. Ибо если крон используется для выполнения PHP-скрипта, то он попутно, естесственно, запускает пхп-интерпритатор, тот тянет за собой модули и пр. - а потом скрипт "увеличивает счётчик в файле на единичку" и складывается.
В то же время если это же делать из уже запущенного (посетителем) скрипта, то кроме "увелечения счётчика на единичку" ничего запускать не придётся - уже всё есть.
Файл и так создаётся/меняется один раз из-за проверки по времени его изменения filemtime(), так что это выступает вместо рандома (рандомом обычно пользуются в случаях типа сборки мусора в БД/файлах или переиндексации чего-то).
Код выглядет также, как если бы его писали как обычно.