2017-11-13 12 views
1

私はクエリを受け取ってデータベースで実行し、返されたデータを含むHTMLテーブルを作成するシステムを作った。これらのテーブルは、さらにアクセスするためにシステムに保存され、ユーザーは電子メールで複数の受信者に送信できます。複数の電子メールをスケジュールするPHP

すべて正常に動作しますが、今はメールをスケジュールする必要があります。 1週間後に「テーブルX」を、2週間後に「テーブルY」を送信する必要があります。どうやってやるの?私はCRONS/WindowsTasksを探しましたが、ユーザーが別のテーブルを作成し続けることができるので、どのテーブルでどのように自動化するのか分かりません。

私はCodeIgniterとPHPMailerMasterを使用してそれを実現しました。ここで

はTableViewerののスクリーンショットで、それはポルトガル語だが、それは含まれています

| TITLE | CONFIG | SEND | | XLSジェネレータ|最後の送信|

作成された各テーブル。 (ただ、あなたはそれがどのように動作するかを理解することができます)

enter image description here

誰もが任意のアイデアを得た場合。

+0

私はあなたが2つのテーブルを管理する必要はないと思います。それは単一のテーブルで達成することができる –

答えて

1

ここには、PHPのcrontabをシミュレートする関数があります。これを動的なcrontabに使用すると、各テーブルに独自の固有の頻度を持たせることができます。

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 . ';'); 
} 

このように使用されます。最初のパラメータは現在の時間です。チェックする時間は2番目のパラメータはcrontabです。

$time_to_run = parse_crontab(date('Y-m-d H:i:s'), '* * * * *') 
関連する問題