PHP新手在这里。我的问题与执行某项任务的逻辑/最佳实践有关。
我在网站上显示新闻事件/公告,需要在特定日期/时间后删除/过期。我已经在数据库中设置了到期日期/时间,当用户在日期/时间通过查询后访问网站并且新闻事件/公告设置为“0”(隐藏)时。
我想知道这是实现它的最佳做法还是有更好的方法?
感谢。
答案 0 :(得分:2)
您提到的方法通常很有效,特别是对于小型应用程序,但不是最佳做法。这不是最佳做法的原因是:
<强>问题强>
前两个似乎并不重要,但这只是因为你现在拥有的任务非常快且非关键。但是,如果一项任务需要一两秒钟,那就意味着用户现在必须等待2秒才能看到该页面,这很糟糕。
同样,如果没有人访问您的网站一周,并且有15个任务需要完成的列表,那么用户现在必须等待30秒。它甚至可能超出整个页面;这意味着你的任务现在还没有完成,而且用户因为看似没有理由而超时而烦恼。
此外,如果您的某个任务对时间要求严格,则仍然无法完成。例如,如果任务是在24小时后向某人发送提醒电子邮件但没有人登录,则不会发送邮件。
最后一个也是一个问题;因为这使得很难看到任务失败的时间(因为错误被记录为用户问题,如果有的话),并且因为您的用户(再次无缘无故)现在正在查看错误屏幕。
<强>解决方案强>
如果您想使用最佳实践,请将所有这些类型的任务移至计划任务(在Windows下)或Cronjob(在unix下)。这意味着您有一个定期启动并执行可以对您的站点进行维护的PHP脚本的系统服务,例如删除这些新闻消息,发送电子邮件或其他内容。
这有许多优点:
大多数提供商允许您甚至在廉价的托管包上设置这些类型的任务。
答案 1 :(得分:0)
到目前为止,最简单的方法是使用一个带有日期时间的publisheduntil字段。每次获得要在页面上显示的事件列表时,请选中此字段,例如
Select * from my_table where published = true and published_until > todays_date
这是确保事件在应有时消失的一种非常简单的方法。