我创建了一个接收查询的系统,在数据库中执行它,然后创建一个包含返回数据的HTML表。然后将这些表保存在系统中以供进一步访问,用户可以通过电子邮件将其发送给多个接收器。
一切正常,但现在我必须安排电子邮件。需要在一周后发送“表格X”,并在两周内发送“表格Y”。我怎样才能做到这一点?我已经查找了CRONS / WindowsTasks,但我不知道如何为每个表自动创建它,因为用户可以继续创建不同的表。
我已经使用CodeIgniter和PHPMailerMaster来实现它。
这是TableViewer的截图,它是葡萄牙语,但它包含:
| TITLE | CONFIG |发送| XLS发电机|最后一次|
为每个创建的表。 (这样你就可以理解它是如何工作的)
如果有人有任何想法。
答案 0 :(得分:1)
这是一个在PHP中模拟crontab的函数。你可以将它用于动态crontabs,因此每个表都可以拥有它独特的频率。
function parse_crontab($time, $crontab) {
// Get current minute, hour, day, month, weekday
$time = explode(' ', date('i G j n w', strtotime($time)));
// Split crontab by space
$crontab = explode(' ', $crontab);
// Foreach part of crontab
foreach ($crontab as $k => &$v) {
// Remove leading zeros to prevent octal comparison, but not if number is already 1 digit
$time[$k] = preg_replace('/^0+(?=\d)/', '', $time[$k]);
// 5,10,15 each treated as seperate parts
$v = explode(',', $v);
// Foreach part we now have
foreach ($v as &$v1) {
// Do preg_replace with regular expression to create evaluations from crontab
$v1 = preg_replace(
// Regex
array(
// *
'/^\*$/',
// 5
'/^\d+$/',
// 5-10
'/^(\d+)\-(\d+)$/',
// */5
'/^\*\/(\d+)$/'
),
// Evaluations
// trim leading 0 to prevent octal comparison
array(
// * is always true
'true',
// Check if it is currently that time,
$time[$k] . '===\0',
// Find if more than or equal lowest and lower or equal than highest
'(\1<=' . $time[$k] . ' and ' . $time[$k] . '<=\2)',
// Use modulus to find if true
$time[$k] . '%\1===0'
),
// Subject we are working with
$v1
);
}
// Join 5,10,15 with `or` conditional
$v = '(' . implode(' or ', $v) . ')';
}
// Require each part is true with `and` conditional
$crontab = implode(' and ', $crontab);
// Evaluate total condition to find if true
return eval('return ' . $crontab . ';');
}
它是这样使用的。第一个参数是当前时间,或者您要检查的时间,第二个参数是crontab。
$time_to_run = parse_crontab(date('Y-m-d H:i:s'), '* * * * *')