Подтвердить что ты не робот

Что такое практическое использование для PHP sleep()?

Я просто просмотрел документы на sleep().

Где бы вы использовали эту функцию?

Возможно ли, чтобы процессор перестал дорожать?

Любые распространенные ошибки?

4b9b3361

Ответ 1

Одно место, где оно находит применение, - это создать задержку.

Допустим, вы создали искателя, который использует curl/file_get_contents для получения удаленных страниц. Теперь вы не хотите забрасывать на удаленном сервере слишком много запросов за короткое время. Таким образом, вы вводите задержку между последовательными запросами.

sleep принимает аргумент в секундах, его друг usleep принимает аргументы в микросекундах и более подходит в некоторых случаях.

Ответ 2

Другой пример: вы запускаете какой-то пакетный процесс, который сильно использует ресурс. Возможно, вы заходите в базу данных из 9 000 000 названий книг и обновляете около 10% из них. Этот процесс должен запускаться в середине дня, но есть так много обновлений, которые нужно выполнить, чтобы запустить пакетную программу, перетащив сервер базы данных на обход для других пользователей.

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

Ответ 3

Вот фрагмент того, как я использую sleep в одном из моих проектов:

foreach($addresses as $address)
{
  $url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
  $result = file_get_contents($url);
  $geo = json_decode($result, TRUE);

  // Do stuff with $geo

  sleep(1);
}

В этом случае sleep помогает мне не блокировать карты Google, потому что я посылаю слишком много запросов на сервер.

Изменить: это пример того, что говорит codaddict.

Ответ 4

Старый вопрос, который я знаю, но другая причина для использования u/sleep может быть, когда вы пишете код безопасности/криптографии, например аутентификацию script. Несколько примеров:

Ответ 5

Вы можете использовать sleep для приостановки выполнения script... например, для задержки вызова AJAX со стороны сервера или реализации наблюдателя. Вы также можете использовать его для имитации задержек.

Я использую это также для задержки sendmail() и co..

Кто-то использует функцию sleep() для предотвращения DoS и login brutefoces, я не согласен, потому что в этом вам нужно добавить некоторые проверки, чтобы предотвратить запуск пользователем несколько раз.

Также проверьте usleep.

Ответ 6

Мне пришлось использовать его недавно, когда я использовал Google Geolocation API. Каждому адресу в цикле необходимо было позвонить на сервер Google, чтобы получить ответ. Я использовал usleep(500000), чтобы все было задействовано достаточно времени.

Ответ 7

Я бы не использовал его для обслуживания веб-страниц, но он полезен для сценариев командной строки.

$ready = false;
do {
  $ready = some_monitor_function();
  sleep(2);
} while (!$ready);

Ответ 8

Супер старые сообщения, но я думал, что тоже буду комментировать. Недавно мне пришлось проверять ОЧЕНЬ длительный процесс, который создал некоторые файлы. Поэтому я сделал функцию, которая выполняет итерацию по функции cURL. Если файл, который я ищу, не существует, я сплю php файл и немного повторю бит:

function remoteFileExists() {
    $curl = curl_init('domain.com/file.ext');

    //don't fetch the actual page, you only want to check the connection is ok
    curl_setopt($curl, CURLOPT_NOBODY, true);

    //do request
    $result = curl_exec($curl);

    //if request did not fail
    if ($result !== false) {
        //if request was ok, check response code
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  

        if ($statusCode == 404) {
              sleep(7);
              remoteFileExists();
        }
        else{
            echo 'exists'; 
        }
    }

    curl_close($curl);

}

echo remoteFileExists();

Ответ 9

Одно из его приложений: если я отправляю письма от script до 100+ клиентов, тогда эта операция займет максимум 1-2 секунды, поэтому большинство веб-сайтов, таких как hotmail и yahoo, считают это спамом, поэтому, чтобы избежать это нам нужно использовать некоторую задержку в выполнении после каждой почты.

Ответ 10

Среди других: вы тестируете веб-приложение, которое делает асинхронные запросы (вызовы AJAX, ленивая загрузка изображений...)

Вы тестируете его локально, поэтому ответы выполняются немедленно, так как есть только один пользователь (вы) и нет задержки в сети.

Использование sleep позволяет вам видеть/тестировать поведение веб-приложения при загрузке и сбое сети при запросах.

Ответ 11

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

  if CheckSystemCPU() > 95  
        SendMeAnEmail()
        sleep(1800)
  fi

Ответ 12

Это немного странный случай... дросселирование файла.

В службе передачи файлов, которую мы запускали много лет назад, файлы были отправлены с серверов восходящей линии 10 Мбит/с. Чтобы предотвратить увязку сети, загрузка script отслеживала, сколько пользователей загружалось за один раз, а затем подсчитывало, сколько байтов она может отправлять за секунду на пользователя. Он отправил бы часть этой суммы, а затем спящий момент (1/4 секунды, я думаю), затем отправьте больше... и т.д.

Таким образом, серверы работали непрерывно примерно на 9,5 Мбит/с без проблем с насыщением восходящей линии... и всегда динамически изменяли скорость загрузки.

Я бы не сделал этого так или в PHP, теперь... но он отлично работал в то время.

Ответ 13

Другой способ использования: если вы хотите выполнять cronjob чаще всего каждую минуту. Для этого я использую следующий код:

sleep(30);
include 'cronjob.php';

Я вызываю этот файл и cronjob.php каждую минуту.