是否可以使用PHP安排任务?比如,我想用jQuery datepicker选择一个日期,并提交它。当该日期等于今天的日期时,将发送电子邮件(例如,或任何其他PHP脚本)。根据用户的不同,日期也会有所不同,每个用户都可以运行多个计划任务。
修改
操作系统是Linux,该网站托管在godaddy.com上 此外,最终用户将选择何时运行这些任务,因此他们可以使用命令行。
修改
欢迎任何Ruby on Rails或Django解决方案。
答案 0 :(得分:1)
如果您使用的是Unix服务器,请尝试at
。
http://www.manpagez.com/man/1/at/
它的工作方式与cron类似,因为它完全独立于PHP,你需要shell_exec()一个外部命令。但是,它有一个简单的命令行界面。与cron工作一样,at
工作可以在重新启动后继续工作。
如果您使用at
,则必须编写单独的脚本来执行您要安排的任务。
示例:
shell_exec("echo 'php script.php' | at -t 201208011234.56");
将于2012年8月1日12:34:56运行script.php。
答案 1 :(得分:1)
您需要在服务器端使用某个进程在预定时间运行任务。
一种流行的方法是将任务信息存储在某个数据库中,并且有一个cron作业不时检查任务队列 - 它非常可靠和安全。
如果没有关于部署环境的更多信息,就无法给出更好的答案。例如:
最有可能你无法在共享托管环境中做到这一点,但我必须说,从安全的角度来看,拥有一个调用shell_exec的网站并不是很明智,所以如果网站暴露,我会避免这样做上网。
一个好的托管服务提供商应该有某种后台任务调度程序,即使它不是crontab。如果您的托管服务提供商没有,试图通过一些特技填补空白可能是一个坏主意。
[更新]
正如我在原帖的编辑部分所说,我在godaddy.com上托管它,我不能让客户运行这些命令行等。是否有其他语言的解决方案?
我不再在godaddy主持,但他们曾经在他们的控制面板上有一个“Cron Manager”。我认为正确的goDaddy cron设置是
/usr/bin/wget -O - -q "http://yoursite.com/cron.php" > /dev/null 2>&1
在Cron Manager的命令选项中。这个“cron.php”将检查任务队列以查看是否有任何要发送的电子邮件(任务队列是数据库中的一个简单表,您将记录客户安排的任何任务)。
答案 2 :(得分:0)
只需在主索引页面或标准包含文件中添加一个检查,即可在没有cron的情况下执行此操作 - 但这仅适用于您无法访问cron(例如共享主机)的情况。在此检查中,您可以获取未完成的操作列表并执行它们,可能使用
if (time_since_last_run > 5*60) // minutes
shell_exec("/usr/bin/php /var/www/check-tasks.php &");
最佳解决方案是使用cron启动PHP脚本,该脚本将检查系统中的计划项目并执行它们。您可以通过wget或直接通过调用PHP来执行此操作。
我拥有的一个共享托管网站是通过cron和wget http://othersite.example.com从我的另一台服务器进行外部安排的。
示例crontab条目:
0 * * * * wget -O - -q -t 1 http://othersite.example.com/cron.php