Forum Webscript.Ru

Программирование => PHP => Тема начата: Lion от 09 Декабря 2001, 18:56:08

Название: скрипт работает только один раз в день
Отправлено: Lion от 09 Декабря 2001, 18:56:08
Приведите пример, как можно сделать что бы скрипт работал только один раз в день.
Название: скрипт работает только один раз в день
Отправлено: Макс от 09 Декабря 2001, 20:46:31
Проверяешь был ли запущен сегодня скрипт, если нет - выполняешь его и записываешь в БД дату выполнения скрипта.
Вот вроде бы и все.
Название: скрипт работает только один раз в день
Отправлено: Oak от 09 Декабря 2001, 21:58:36
Лучше наоборот - сначала записывать , а потом скрипт выполнять.....
 А то может несколько раз выполнится :)

 Там про Flock вспоминали - так здесь это тоже в тему - надо
одноразовое выполнение.
Название: скрипт работает только один раз в день
Отправлено: Lion от 09 Декабря 2001, 22:02:27
Цитировать
Проверяешь был ли запущен сегодня скрипт

вот этот момент особенно интересует, примерчик хочеться...
Название: скрипт работает только один раз в день
Отправлено: Макс от 09 Декабря 2001, 22:18:17
В БД (или в файл) записывается дата последнего запуска. А в скрипте  вытаскиваешь дату и сравниваешь с сегодняшним днем.

Цитировать
Лучше наоборот - сначала записывать , а потом скрипт выполнять.....
Да, так наверное лучше.
Название: touch
Отправлено: Oak от 09 Декабря 2001, 22:22:47
Есть такая класная функция - touch, она в разделе операций с файлами...


 2 if ( touch($FileName) ) {
 3   print "$FileName modification time has been changed to todays date and time";
 4 } else {
 5   print "Sorry Could Not change modification time of $FileName";
 6 }


Ну а "filemtime -- Get file modification time"

Только чтобы было совсем правильно - надо
1) смотришь время $tm=filemtime("timestamp");
2) сравниваешь $tm < time() + сутки (в секундах)
если нет - уходим (end)
если да
3.1) rename("timestamp","timestamp2") - чтобы никто другой не поменял. (проверяешь, без ошибок ли это сделано)
Если ошибка - значет кто-то другой уже это делает, а этому скрипту не надо - уходишь. (end)
Если получилось, значит этот скрипт и должен делать всю грязную работу.... (3.2)
3.2) делаем touch("timestamp2");
3.3) ложим файлик назад  rename("timestamp2","timestamp")
3.4) спокойно отрабатываем, что надо

end)

Да, если твой скриптик может недоделать это доконца и кануть влету, то сделай то же самое
для конца операции (3.5) - только файлик какой-то другой "script.completed".
И проверяй так же, только период несколько больше суток (а вдруг скрипт просто медленно работает)

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