PHP ussleep防止脚本超时


PHP usleep to prevent script timeout

我有一个脚本,加载一个大目录列表,只是(在它的性质)需要永远加载。我现在在某些情况下会遇到脚本超时,我很好奇我是否可以使用ussleep之类的东西来防止脚本超时,或者如果我只会让情况变得更糟?

不能使用set_time_limit()设置超时限制?

如果设置为0,脚本将永远运行。

set_time_limit(0);

ussleep()将在给定的时间内停止PHP脚本的执行。在此期间,您的脚本将不会列出任何目录等。它只会冻结脚本,直到允许它继续。

PHP可以尝试查找一个长时间不存在的文件/目录,所以如果你已经使用了:

if ((is_dir($path) || file_exists($path)) && ($dh = opendir($path)))
{
  while(($file = readdir($dh)) !== false)
  {
    .. file or dir is found, do stuff :)
  }
  closedir($dh);
}

我什么也没说,但是如果你简单地用:

$dh = opendir($path);

在脚本超时之前可能需要几分钟,但是它不做任何事情。

您是否尝试过使用RecursiveDirectoryIterator来生成目录列表?

我曾经使用递归函数来生成目录清单,当我不得不处理大量深入到更深层次的文件时,无意中导致脚本超时。使用RecursiveDirectoryIterator解决了我的许多问题。

你可以尝试set_time_limit或者看看你是否可以优化你的代码:

  • 在系统上执行ls -l > results.txt &,以便在后台启动清单并将其复制到results.txt文件。
  • 通过使用子目录
  • 来减少目录中的文件数量