如何设置新闻事件/公告在PHP中过期?

时间:2014-12-30 09:31:20

标签: php mysql

PHP新手在这里。我的问题与执行某项任务的逻辑/最佳实践有关。

我在网站上显示新闻事件/公告,需要在特定日期/时间后删除/过期。我已经在数据库中设置了到期日期/时间,当用户在日期/时间通过查询后访问网站并且新闻事件/公告设置为“0”(隐藏)时。

我想知道这是实现它的最佳做法还是有更好的方法?

感谢。

2 个答案:

答案 0 :(得分:2)

您提到的方法通常很有效,特别是对于小型应用程序,但不是最佳做法。这不是最佳做法的原因是:

<强>问题

  1. 您正在让用户等待任务执行
  2. 如果您的网站上没有活动,则无法执行这些任务
  3. 如果在执行任务时发生任何事情,您的用户将收到错误
  4. 前两个似乎并不重要,但这只是因为你现在拥有的任务非常快且非关键。但是,如果一项任务需要一两秒钟,那就意味着用户现在必须等待2秒才能看到该页面,这很糟糕。

    同样,如果没有人访问您的网站一周,并且有15个任务需要完成的列表,那么用户现在必须等待30秒。它甚至可能超出整个页面;这意味着你的任务现在还没有完成,而且用户因为看似没有理由而超时而烦恼。

    此外,如果您的某个任务对时间要求严格,则仍然无法完成。例如,如果任务是在24小时后向某人发送提醒电子邮件但没有人登录,则不会发送邮件。

    最后一个也是一个问题;因为这使得很难看到任务失败的时间(因为错误被记录为用户问题,如果有的话),并且因为您的用户(再次无缘无故)现在正在查看错误屏幕。

    <强>解决方案

    如果您想使用最佳实践,请将所有这些类型的任务移至计划任务(在Windows下)或Cronjob(在unix下)。这意味着您有一个定期启动并执行可以对您的站点进行维护的PHP脚本的系统服务,例如删除这些新闻消息,发送电子邮件或其他内容。

    这有许多优点:

    1. 当需要运行任务时,服务器将始终按时运行
    2. 您可以禁用超时并升级内存可用性以运行密集型任务
    3. 用户无需等待任何事情完成
    4. 您可以向服务器添加特殊日志记录,以便您知道这些重要但隐藏的任务何时失败
    5. 大多数提供商允许您甚至在廉价的托管包上设置这些类型的任务。

答案 1 :(得分:0)

到目前为止,最简单的方法是使用一个带有日期时间的publisheduntil字段。每次获得要在页面上显示的事件列表时,请选中此字段,例如

Select * from my_table where published = true and published_until > todays_date

这是确保事件在应有时消失的一种非常简单的方法。