PHP计时机制


PHP timing mechanism

例如,我想每天8:00发送邮件,收件人和内容都在我的数据库中。我知道PHP中有一种方式是不断刷新,比如

ignore_user_abort();
set_time_limit(0);
$interval=60*30;
do{
    //do
    sleep($interval);
}while(true);

然而,这不是一个明智的方法。PHP中是否有更好的计时机制?如果你能给我举个例子,我将不胜感激。谢谢!

看起来PHP不是您在这个场景中想要的。PHP代码只在用户访问您的网站时运行。虽然PHP完全能够发送电子邮件,但它们只会在用户打开网页时发送。

我认为你正在寻找的是服务器上的另一个程序,它将在指定的时间发送电子邮件。有太多不同的选择,每一个都非常适合不同的目的。

对于Linux或Mac,我认为Cron将是一个很好的解决方案。Cron是一个非常简单的程序,它使得调度命令的执行相对容易。

我对Windows不太熟悉,但是@Mike W评论说任务调度程序应该适合你的需要。

当然现在你需要一个程序来发送电子邮件。再说一次,有很多很多的选择。我相信快速的谷歌搜索会让你受益匪浅。您可能想尝试找到一个能够发送电子邮件的Python库,因为Python是一种非常简单且易于学习的脚本语言。

如果你有一个接收者数据库,那么肯定有Python库能够访问它。我不太了解你的设置,但是几乎在任何编程语言中访问数据库都是非常容易的。

我认为最好使用CRON作业。

你可以在这里得到指导。

http://www.thesitewizard.com/general/set-cron-job.shtml
http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

未提及的方法sleep($interval);

你必须使用任务调度程序,如Linux中的Cron, windows中的任务调度程序。
crontab -e

添加以下行

0 8 * * * root $HOME/scripts/send_email.sh >> $HOME/tmp/out 2>&1

现在您应该创建send_email.sh脚本。像这样:

#!/bin/bash
recipients="user0@domain.com user1@domain.com user2@domain.com"
subject="...Subject..."
cat $HOME/email_message | mail -s $subject $recipients

$HOME/email_message是您要发送的消息(文件)。

不要忘记为脚本授予执行权限:

chmod +x $HOME/scripts/send_email.sh