33

在 PHP 中,我想在循环的每次迭代中放置一些秒延迟。

for ($i=0; $i <= 10; $i++) {
    $file_exists=file_exists($location.$filename);
    if($file_exists) {
        break;
    }

    //sleep for 3 seconds
}

我怎样才能做到这一点?

4

5 回答 5

59

使用PHP sleep()功能。http://php.net/manual/en/function.sleep.php 这会在给定的秒数内停止执行下一个循环。所以像这样

for ($i=0; $i <= 10; $i++) {
    $file_exists=file_exists($location.$filename);
    if($file_exists) {
        break;
    }
    sleep(3); // this should halt for 3 seconds for every loop
}
于 2013-03-14T16:18:26.617 回答
13

我明白你在做什么......你延迟脚本以不断检查文件系统上的文件(我假设正在上传或由另一个脚本编写的文件)。这是一种不好的方法。

  1. 您的脚本将运行缓慢。如果有多个用户正在运行该脚本,则会阻塞服务器。
  2. 对于某些用户,您的服务器可能会超时。
  3. HDD 访问是一种昂贵的资源。
  4. 有更好的方法来做到这一点。

你可以使用 Ajax。并使用超时每隔几秒钟调用一次您的 PHP 脚本。这将避免缓慢的脚本加载。你也可以不断地这样做(当前的 for 循环只会运行 33 秒然后停止)。

您可以使用数据库。在某些情况下,数据库访问比 HDD 访问更快。尤其是视图和缓存。创建文件/上传文件的脚本可以在表中设置一个标志(即file_exists),然后您可以有一个脚本来检查数据库中的该字段。

于 2013-03-14T16:39:58.220 回答
7

您可以使用sleep(3)which 使线程休眠 3 秒。

修正php 中的sleep 方法是以秒为单位的

于 2013-03-14T16:20:22.767 回答
2

野兔有两种方法可以让 php 脚本休眠一段时间。当您有代码并想暂停脚本工作一段时间时,请使用这些功能。在这些示例中,第一部分代码将在脚本运行时完成,第二部分代码将在时间延迟下完成。

  1. 使用sleep()函数,您可以以秒为单位定义睡眠时间。

例子:

echo "Message 1";
// The first part of code.
$timeInSeconds = 3;
sleep($timeInSeconds);
// The second part of code.
echo "Message 2";

这样就可以让 php 脚本休眠 3 秒。使用此功能,您可以将脚本休眠整数(整数)秒。

  1. 使用usleep()函数,您可以以微秒为单位定义睡眠时间。对于需要比一秒更精确的时间的间隔,此睡眠时间很方便。

例子:

echo "Message 1";
// The first part of code.
$timeInMicroSeconds = 2487147;
usleep($timeInMicroSeconds);
// The second part of code.
echo "Message 2";

如果您想让 php 的时间值小于秒(浮点数),则可以使用此功能。在这个例子中,我让脚本休眠了 2.487147 秒。

于 2017-01-31T15:59:42.100 回答
0

您是否考虑过使用supervisorD使用 PHP 守护程序脚本。我在需要一直运行的多个任务中使用它。

关键是确保每次运行脚本时检查内存资源。如果它太高,请停止该过程,然后让它重新启动。

我已成功使用此过程来始终检查数据库记录以查找要处理的任务。

这可能有点矫枉过正,但值得考虑。

于 2016-05-31T02:03:35.937 回答