是否可以将PHP函数设置为在一天内执行?

时间:2016-11-19 07:19:28

标签: php e-commerce

由于糟糕的管理,我目前正在从头开始构建电子商务。我到了需要做一些轻量级库存管理的地步,我想在用户设定购买东西的意图(继续从购物车退房)后,我应该减少库存量并在处于待定状态的DB。但是,我想检查在创建此订单的一天后,状态是否仍处于待处理状态。如果是,那么我应该退回股票。

如果PHP有像JavaScript setTimeout()这样的函数,这将很容易,但我发现很难找到类似的功能。我考虑过创建一个cron作业,但我不知道如何才能使它执行脚本获得执行状态检查所需的所有必要参数(最重要的是订单ID)。

还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

如您所知,PHP是解释语言,因此一旦开始执行,它将一直运行直到程序结束或达到最大时间限制(根据您的PHP设置)。因此,在单个脚本中,它并不容易。

有两个选项

  1. 在配置中设置最大执行时间限制0(即没有时间限制)并执行运行无限循环的PHP脚本并检查数据库并调用状态检查和状态更改功能。 但这将是资源密集型的,因为它是一个无限循环,并且有1000个订单会造成崩溃。
  2. 使用cronjobs - >   使用cronjobs,您可以在固定的时间间隔内执行脚本文件。您必须创建两个cron作业脚本。

    1. 一个脚本,用于检查每个订单的状态并将具有挂起状态的订单推送到中间表,该中间表存储具有挂起状态的ID。这意味着

      $cancellable_orders = get_items_from_cancellable_orders_table();
      foreach($cancellable_orders as $order) {
          cancel_order($order);
          remove_from_cancellable_orders($order);
      }
      
  3. 取消可取消订单并从可取消订单中删除的脚本table.ie。

    GRADLE_OPTS
  4. 在两个单独的cron作业中运行每个脚本,并为crons设置一个小间隔,例如1分钟 同样,第二个脚本中的两个操作可以合并到MYSQL存储过程中的单个操作中,您可以调用该过程,这将更快。

    但是,通过使用MYSQL事件和程序,效率和速度更快。