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

Is it possible to set a PHP function to execute in one day?

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

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

还有其他选择吗?

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

有两种选择

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

    1. 一个脚本,用于检查每个订单的状态并将那些处于待定状态的订单推送到一个中间 table,后者存储处于待定状态的订单的 ID。也就是说

       foreach($orders as $order) {
          if($order->status=='pending' && $order->date<CURRENT_DATE)
              push_order_to_cancellable_orders_table();
       } 
      
  3. 取消可取消订单并将其从可取消订单中移除的脚本table.ie。

    $cancellable_orders = get_items_from_cancellable_orders_table();
    foreach($cancellable_orders as $order) {
        cancel_order($order);
        remove_from_cancellable_orders($order);
    }
    

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

但是,更高效、更快速的方法还是使用 MYSQL 事件和过程。