Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查拍卖是否已完成-触发PHP处理_Php_Sql - Fatal编程技术网

如何检查拍卖是否已完成-触发PHP处理

如何检查拍卖是否已完成-触发PHP处理,php,sql,Php,Sql,关于这一点我有一些想法,但这里是我需要做的,我只是想听听别人的意见 我正在用PHP/SQL编写一个小型拍卖网站,但我遇到了一个障碍 当一件物品完成时,就像易趣一样,我需要知道它完成了,并向谁赢得了它和谁卖掉了它发送电子邮件 我能想到的唯一方法是安排一段代码来持续检查拍卖结束了什么,但肯定有更好的方法吗?我会设置一个cron作业,每10-20-30-60分钟运行一次,以发送电子邮件和更新拍卖细节 如果您觉得脚本速度很快,那么每隔一分钟左右运行一次就可以了 请注意,许多共享主机只允许您每小时发送一定

关于这一点我有一些想法,但这里是我需要做的,我只是想听听别人的意见

我正在用PHP/SQL编写一个小型拍卖网站,但我遇到了一个障碍

当一件物品完成时,就像易趣一样,我需要知道它完成了,并向谁赢得了它和谁卖掉了它发送电子邮件


我能想到的唯一方法是安排一段代码来持续检查拍卖结束了什么,但肯定有更好的方法吗?

我会设置一个cron作业,每10-20-30-60分钟运行一次,以发送电子邮件和更新拍卖细节

如果您觉得脚本速度很快,那么每隔一分钟左右运行一次就可以了

请注意,许多共享主机只允许您每小时发送一定数量的电子邮件


这些电子邮件是否需要立即发送?,

我可以看到您试图实现的两个可能的问题和目标:

  • 视觉:您希望当用户浏览您的网站时,在不更新或刷新页面的情况下,它会不断更新页面,以便在试镜结束时,出现类似“试镜结束,项目转到…”的内容。 解决方案:您应该使用Javascript和AJAX。(我想你已经在用它倒计时了)。每5秒进行一次AJAX调用(可能足够)并更新内容
  • 实用:如果试镜结束,用户将无法加入试镜解决方案:只需使用PHP和mysql即可。您可以创建一个存储试听开始时间戳的字段,然后制作一个简单的
    if(time()>=($timestamp+$duration)){}
    (其中
    $timestamp
    是试听的开始,
    $duration
    是试听的持续时间)来阻止可能的坏用户尝试这样做

解决方案可以分为多个部分:

  • 通过Cron启动的脚本(每5分钟一次就可以了,甚至更少……)。它检测完成的拍卖并将它们放入队列中

  • 一个脚本几乎连续运行处理队列中的项目

请注意:

  • 在显示页面之前,您必须确保拍卖仍处于打开状态!(一个简单的测试)这样人们就不能在它关闭后加入
  • 对于每个脚本,都可以使用PHP或任何其他语言
优势

  • cron作业速度很快,资源很低,如果有大量拍卖要处理,则不会有并行运行的风险(然后冲突)
  • 队列系统确保您的系统不会因为发生的事情太多而崩溃。。。它将尽可能快地处理队列,但如果不够快,网站将继续运行。然而,你可以在拍卖结束后数小时或数天内收到电子邮件。但“限制”更具可预测性,不会使系统崩溃
  • 您可以在将来通过队列的多线程处理、分布式处理。。。这是一个可伸缩的体系结构
  • 这种建筑很有趣
其他信息:

  • 关于守护程序脚本,我不必连续运行。您可以做的是:在cron作业结束时,如果队列中有项目,那么它会检查其他脚本(处理)是否正在运行。如果是,则退出。如果另一个脚本没有运行,它将启动它
  • 守护程序脚本从队列中获取一个项目并对其进行处理。最后,如果队列中仍有项目,它将对其进行处理,否则将退出
  • 有了这个系统,一切都是最优的,每个人都彼此相爱

要检查另一个脚本是否正在运行,可以使用文件并在其中写入“1”或“0”(=正在运行/未运行)。第一个脚本读它,第二个脚本写它。。。您也可以使用数据库来完成这项工作。或者您也可以使用系统工具或shell命令…

请分享SQL脚本,该脚本根据投标截止日期查询出价最高的投标人(如何知道投标已结束),并将产品授予出价最高的投标人

我想您希望有一些听众。。。我不知道有什么,我会每分钟安排一次检查,但是。。。我对我的答案没有足够的信心,不能把它作为“答案”。易趣不是已经发送了这些信息吗?它是正确的,我需要一种倾听者。。。但我不能每1分钟运行一次,因为这太慢了,因为有人可能会马上付钱。。。如果该网站每10秒运行1000次拍卖,则该脚本可能需要60秒才能运行。如果他希望该网站将拍卖更新为“已结束”,该脚本将更新数据库并发送电子邮件。当脚本找到已完成的拍卖时,它会将拍卖更新为“已结束”。前端显然需要刷新才能看到结果,但它将是自动的。如果你认为人们只是盯着拍卖会等着拍卖会说“结束”,你可以使用ajax在后台轮询db。因此,您可以使用ajax来帮助您确定拍卖结束、操作电子邮件发送和其他拍卖更新。我认为您也应该将此添加到您的答案中,因为不清楚脚本是否也会更新db。我在想为什么要使用cron和Ajax,而你也可以只使用Ajax。然后将使用Ajax检查当前时间==结束时间来决定是否结束拍卖我想你误解了这个问题,它是关于拍卖结束时调用的侦听器=>在