PHP работает, чтобы предотвратить тайм-аут скрипта - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть скрипт, который загружает большой список каталогов, и просто (по своей природе) загружается вечно.Сейчас я в некоторых случаях испытываю истечение времени ожидания сценария и мне было любопытно, смогу ли я использовать что-то вроде usleep, чтобы не дать сценарию истечь время ожидания, или я просто ухудшу ситуацию?

Ответы [ 4 ]

3 голосов
/ 13 ноября 2011

Вы не можете установить лимит времени с помощью set_time_limit () ?

Если установить значение 0, скрипт будет работать вечно.

set_time_limit(0);

Usleep () остановит выполнение сценария PHP в указанное время. За это время ваш скрипт не будет перечислять какие-либо каталоги и тому подобное. Он просто заморозит сценарий, пока не будет разрешено продолжить.

1 голос
/ 13 ноября 2011

Вы пытались использовать RecursiveDirectoryIterator для создания списка каталогов?

Раньше я использовал рекурсивную функцию для создания списков каталогов, которые непреднамеренно приводят к истечению времени ожидания сценария, когда мне приходилось работать с огромным количеством файлов, переходящих на более глубокие уровни. Использование RecursiveDirectoryIterator решило многие мои проблемы.

1 голос
/ 13 ноября 2011

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);

Может пройти несколько минут до истечения времени ожидания сценария, но он ничего не делает.

0 голосов
/ 13 ноября 2011

Вы можете попробовать set_time_limit или посмотреть, можете ли вы оптимизировать свой код:

  • выполнить ls -l > results.txt & в вашей системе, чтобы список запустился в фоновом режиме и скопировал его в results.txt.file.
  • уменьшить количество файлов в вашем каталоге, используя подкаталоги
...