Как реализовать запланированные события в PHP / MySQL Web-приложении - PullRequest
0 голосов
/ 30 июня 2011

Я работаю над веб-приложением для интрасети, используя PHP / MySQL. У меня вопрос о запланированных мероприятиях: у меня есть 2 важные даты в год (позвольте мне назвать их date_01 и date_02), где система должна изменить время начала регистрации сотрудников. Например, в date_01 регистрация начинается в x, а в date_02 регистрация начинается в y. Это как летнее время регистрации отличается от зимнего времени регистрации ...

С точки зрения разработки программного обеспечения, что, по вашему мнению, является лучшим способом достижения этой цели?
-> Работа Cron?
-> MySQL запланированные события?
-> Определенный трюк PHP, если это возможно?
-> Ваши предложения?

Спасибо

Ответы [ 3 ]

1 голос
/ 30 июня 2011

Я обычно делаю такой вкус с системным хрон

Создайте файл с классической отметкой для внешнего интерпретатора, затем код php внутри тегов

#!/usr/bin/php -f
<?php

    function hello_world(){ echo "hi!"; }
    hello_world();

?>

Затем сделайте его исполняемым с помощью chmod a + x my_php_files_with_commands.php и добавьте запись в cron для желаемого расписания. Вы получаете мгновенный доступ к функциям php вашего приложения, просто добавьте необходимые вызовы require () и поиграйте с ними. Доступ к базе данных, доступ к файлам, что угодно ... кроме (очевидно) всего, что связано с сессиями. Осторожнее с этим.

РЕДАКТИРОВАТЬ: для людей, которые говорят не делать это как cron ... вы понимаете, тогда код будет выполнен, если кто-то сделает что-то в интранете в выбранный день? Это означает, что вам НУЖНО, чтобы кто-то действительно что-то делал с интранетом, вместо действия beign, выполняемого в выбранный день. Что если в этот день никто не войдет в интранет?

1 голос
/ 30 июня 2011

Я думаю, вам не нужны запланированные задания вообще.У вас может быть такая таблица:

check_ins (valid_from, valid_until, check_in_start_time)

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

select check_in_start_time
from check_ins
where
    now() >= valid_from and
    now() < valid_until
0 голосов
/ 30 июня 2011

Я бы вообще не реализовал это как запланированное задание - я заставил бы код работать со сценарием в зависимости от даты его обработки.

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

Трудно сказать, как именно вы должны реализовать это, не понимая больше, что делает система.Одним из способов было бы жестко закодировать логику, например, в MySQL ....

 SELECT emp_id, 
   STRTODATE(CONCAT(DATE_FORMAT(clock_in_time, '%Y-%m-%d '), 
     IF(DATE_FORMAT(clock_in_time, '%m') 
         BETWEEN '05' AND '08', '08:00', '09:00'))) 
     AS expected_clockin,
   clock_in_time AS actual
 FROM clockin

или в качестве альтернативы использовать таблицу поиска ....

SELECT a.emp_id,
  STRTODATE(CONCAT(DATE_FORMAT(a.clock_in_time, '%Y-%m-%d '),
     b.start_time) 
  AS expected_clockin,
   a.clock_in_time AS actual
 FROM clockin a INNER JOIN lookup b
    ON a.clock_in_time BETWEEN b.period_start AND b.period_end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...