我正在发布我的 php 脚本,希望得到您的意见和建议。我的 PHP 应用程序需要根据本地时间向用户发送单独的电子邮件。
每个用户都有一组他们选择接收电子邮件的时间标记。这是数据库中时间标记字段的样子:12:00:00, 14:15:00, 16:30:00
.
我将时间标记四舍五入到最接近的一刻钟,并每一刻钟发送一次 cronjobs 以检查哪些用户被安排接收电子邮件并在循环中一个接一个地发送相应的电子邮件(担心的样子:-/)。
我的服务器时区设置为,America/New_York
因此我无法根据我的时间发送电子邮件,因为用户位于不同的位置。下面我开发了一个应该处理这个问题的模型。
解决方案:
- 收集每个用户的时区
- 在每个 cronjob 上,使用他们的时区数据在 php 中获取每个用户的本地时间
创建用户的时间标记数组。
示例:
12:00:00, 14:15:00, 16:30:00
到Array ( [0] => 12:00:00 [1] => 14:15:00 [2] => 16:30:00 )
如果用户的本地时间与他/她的时间标记之一匹配,则发送电子邮件
- 使用发送日期更新数据库
php脚本:
//loop through user's entries table that holds content to be emailed
foreach ($entries as $entry) {
//create array of user's time-marks set
$timemarks_arr = array_map( "trim", str_getcsv($entry->timemarks));
//get user's localtime
$timezone = $entry->timezone; //user's time-zone
$userlocaltime = gmt_to_local($timestamp, $timezone, $daylight_saving); //gets user's localtime
//if a user's time-mark matches his/her localtime
if (in_array($userlocaltime, $timemarks_arr))
{
//send email using Codeigniter's email class
$this->email->clear(); //reset between cycles
$this->email->from('myemail@gmail.com', 'Name');
$this->email->to($entry->email);
$this->email->subject($entry->content);
$this->email->message($entry->content);
$this->email->send();
echo $this->email->print_debugger();
//update date sent
$user_id = $entry->user_id;
$this->db->query("UPDATE `entries` SET date_sent=now() WHERE `user_id` = $user_id AND `entry_id` = $entry->entry_id");
}
}
关注点:
- 模型可靠吗?
- 性能问题。仅发送 4 封电子邮件大约需要 5 秒。(注意:我正在从本地 Windows 服务器上的测试环境发送电子邮件 - WAMP)