【问题标题】:Php, wait 5 seconds before executing an actionPhp,在执行一个动作之前等待 5 秒
【发布时间】:2011-07-18 09:23:30
【问题描述】:

我有一个 .php 脚本,用于创建我的产品列表。 我在共享主机上,所以我不能做很多查询,否则我会得到一个空白页。

这就是我现在使用脚本的方式:

script.php?start=0&end=500&indexOfFile=0  ->> make a product0.txt file with first 500 products

script.php?start=501&end=1000&indexOfFile=1 ->> product1.txt file with another 500 products

script.php?start=1001&end=1500&indexOfFile=2 ->> product2.txt file with last 500 products

如何修改脚本,让它自动生成所有这些文件,这样我就不必每次手动更改链接?

我想单击一个按钮来执行此操作:

使用前 500 个产品制作 product0.txt 文件

等待 5 秒

用另外 500 个产品制作 product1.txt 文件

等待 5 秒

使用最后 500 个产品制作 product2.txt 文件

【问题讨论】:

  • 在不到你写这篇文章的时间里,你可以复制 script.php 的内容,再粘贴两次,硬编码每个部分的 $start$end 值,并在每个复制/粘贴之间添加了sleep(5)。这就是整个脚本。
  • 我认为最好的方法是在一个全局数组中检索您需要的所有产品,然后对其进行切片,将数据写入单独的文件中就完成了。这只需要一个 sql 查询

标签: php


【解决方案1】:

使用:

sleep(NUMBER_OF_SECONDS);

【讨论】:

    【解决方案2】:

    在开始你的行动之前,使用

     sleep(5);
    

    【讨论】:

      【解决方案3】:

      或:

      usleep(NUMBER_OF_MICRO_SECONDS);
      

      【讨论】:

        【解决方案4】:

        2018 年 1 月,唯一对我有用的解决方案:

        <?php
        
        if (ob_get_level() == 0) ob_start();
        for ($i = 0; $i<10; $i++){
        
            echo "<br> Line to show.";
            echo str_pad('',4096)."\n";    
        
            ob_flush();
            flush();
            sleep(2);
        }
        
        echo "Done.";
        
        ob_end_flush();
        

        ?>

        【讨论】:

          【解决方案5】:

          我用这个

              $i = 1;
              $last_time = $_SERVER['REQUEST_TIME'];
              while($i > 0){
                  $total = $_SERVER['REQUEST_TIME'] - $last_time;
                  if($total >= 2){
                      // Code Here
                      $i = -1;
                  }
              }
          

          你可以使用

          function WaitForSec($sec){
              $i = 1;
              $last_time = $_SERVER['REQUEST_TIME'];
              while($i > 0){
                  $total = $_SERVER['REQUEST_TIME'] - $last_time;
                  if($total >= 2){
                      return 1;
                      $i = -1;
                  }
              }
          }
          

          并运行代码 =>

          WaitForSec(your_sec);
          

          例子:

          WaitForSec(5);
          

          你可以使用睡眠

          例子:

          sleep(5);
          

          【讨论】:

          • 如果有执行相同功能的内置函数,为什么还要编写自定义函数?有人可能会否决您对此的回答....
          • 我的共享主机禁止/禁用 php sleep()。谢谢@kha
          • @kha $_SERVER['REQUEST_TIME'] 在我的共享主机上产生了无限循环。我切换到$now = time(); while ($now + 4 &gt; time()) { // do nothing }
          【解决方案6】:

          我在共享主机上,所以我不能做很多查询,否则我会得到一个空白页面。

          这听起来很奇怪。我已经为我的上一个项目找到了最便宜的 PHP 托管包——它的行为不是这样的。我不会为这样做的服务付费。事实上,我什至不知道如何配置服务器来复制这种行为。

          不管它为什么会这样,在脚本中间添加一个 sleep 都不能解决问题。

          由于大概是您控制自己的产品目录,因此新产品应该相对不常见(或者您是否正在尝试获取库存报告?)。如果您控制何时更改数据,为什么要自动运行脚本?还是您的意思是您已经拥有这些 URL,并且每次运行它们时都会获得预期的文件?

          【讨论】:

          • 他可能得到空白结果,因为他在执行每个查询后没有释放结果
          【解决方案7】:

          https://www.php.net/manual/es/function.usleep.php

          <?php
          // Wait 2 seconds
          usleep(2000000);
          
          // if you need 5 seconds
          usleep(5000000);
          ?>
          

          【讨论】:

          • foreach 是不必要的,我知道延迟不是 PHP 中的一个函数。
          猜你喜欢
          • 2012-12-23
          • 1970-01-01
          • 1970-01-01
          • 2017-06-11
          • 2023-02-22
          • 2017-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多