php可以在没有用户交互的情况下启动脚本,以便与数据库交互


Can php launch scripts without user interaction in order to interact with the database?

我在网上搜索过,显然没有用户交互就无法启动php脚本。

很少有顾问推荐我Cron,但我不确定这是正确的做法。

我正在建立一个可以像ebay一样进行拍卖的网站。一段时间后,这些物品就不再可用了,拍卖也就结束了。

我想知道一种自动与数据库交互的方法。

什么时候需要知道对象是否可用?->只有当有人问的时候。

然后你就有了你正在搜索的用户交互。

如果你想,比如说,给拍卖的获胜者发一封电子邮件,那就不一样了。在这种情况下,您需要将一些计时器设置为拍卖的结束时间。最简单的方法是做一个cron工作。。。

有几种方法可以做到这一点。Cron是其中一个有效的,如果有,我会推荐它。

另一种是在处理与对象相关的每个请求之前检查它是否仍然有效。如果不是,您可以立即从数据库中删除它(或根据需要执行任何操作),并显示不同的页面。

此外,您还可以将基于时间的脚本上次运行的时间存储在数据库中,并将该时间与当前时间进行比较。如果延迟足够大,则可以运行基于时间的代码。然而,如果多个用户同时访问该页面,则很容易出现竞争情况,因此脚本可能会运行多次(不过,使用锁或其他方法可能可以避免这种情况)。

从shell编辑cronjobs:crontab -e

每10分钟运行一次作业:*/10 * * * * curl "http://example.com/finished.php"

TheGeekStuff.com cron示例

使用heartbeat/bot实现ation

频繁运行的Cron作业或在启动时启动并连续运行的程序(可能是周期性睡眠)是可行的。对于cron作业,您需要确保在任何给定时间都没有两个作业在运行,或者编写它,以便在任何给定的时间都有多个作业也无所谓。有了"常驻"程序,您需要弄清楚当它意外崩溃时如何处理这种情况。

不过,我不会依靠这种机制来真正结束拍卖。这应该在您的数据库/网站中处理。也就是说,拍卖有一个结束时间,数据库约束或您的代码使其无法在结束的拍卖中出价。通知赢家和卖家,设置付款流程等都是您的服务/预定任务可以做的事情。