Sleep: примеры (PHP)

Использование PHP функции sleep для создания задержек выполнения скрипта
Раздел: Управление выполнением
sleep(int seconds): int
Описание функции sleep()

Функция sleep() приостанавливает выполнение скрипта на заданное количество секунд. Она принимает один обязательный аргумент — целое положительное число или ноль.

Назначение

Основная область применения — создание искусственных задержек в выполнении скрипта. Это может потребоваться для ограничения частоты запросов к внешним API, симуляции длительных операций, создания временных интервалов между циклами или выполнения задач по расписанию с определенным интервалом.

Аргументы функции
  • seconds (int) — количество секунд, на которое приостанавливается выполнение. В PHP 8 тип аргумента строго int. Если передано отрицательное число, будет выброшена ошибка ValueError.

Функция возвращает 0 в случае успеха или false в случае ошибки (например, если сигнал прервал задержку). На платформах Windows возвращаемое значение всегда 0.

Простые примеры использования
Базовая задержка

Следующий код демонстрирует простую паузу в 2 секунды.

<?
echo 'Начало: ' . date('H:i:s') . '\n';
sleep(2);
echo 'Конец: ' . date('H:i:s') . '\n';
?>
Начало: 14:30:25
Конец: 14:30:27
Задержка на 0 секунд

Передача 0 приводит к немедленному продолжению выполнения.

<?
echo 'Start\n';
sleep(0); // Фактически без задержки
echo 'Finish\n';
?>
Start
Finish
Альтернативные функции в PHP

PHP предлагает другие функции для управления временем выполнения с более высокой точностью или для других целей.

usleep()

Функция usleep() приостанавливает выполнение на заданное количество микросекунд (1 секунда = 1,000,000 микросекунд). Полезна для очень коротких задержек.

time_nanosleep()

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

time_sleep_until()

Приостанавливает выполнение скрипта до наступления заданного временно́й метки. Удобна для планирования запуска операции в конкретный момент.

Выбор функции

Для паузы в целых секундах достаточно sleep(). Для субсекундных задержек используют usleep() или time_nanosleep(). Для выполнения задачи в конкретное время подходит time_sleep_until().

Аналоги в других языках

Sleep в Python

Модуль time предоставляет функцию sleep(), которая принимает аргумент типа float (доли секунд).

import time
print("Start:", time.strftime("%H:%M:%S"))
time.sleep(1.5)  # Задержка 1.5 секунды
print("End:", time.strftime("%H:%M:%S"))
Start: 14:30:00
End: 14:30:01

Sleep в Javascript

В однопоточном JS нет синхронной функции задержки, блокирующей поток. Используют асинхронную функцию setTimeout() внутри async/await.

async function demo() {
    console.log("Start:", new Date().toLocaleTimeString());
    await new Promise(resolve => setTimeout(resolve, 2000)); // 2000 мс
    console.log("End:", new Date().toLocaleTimeString());
}
demo();
Start: 14:30:00
End: 14:30:02

Sleep в MySQL

Имеется функция SLEEP(), выполняющая паузу в секундах для текущего соединения.

SELECT SLEEP(3); -- Задержка 3 секунды
# Возвращает 0 после 3-секундной паузы
Bash

Команда sleep приостанавливает выполнение скрипта.

echo "Start: $(date +%H:%M:%S)"
sleep 2
echo "End: $(date +%H:%M:%S)"
Start: 14:30:00
End: 14:30:02
Типичные ошибки и их предотвращение
Передача отрицательного числа

В PHP 8 это вызывает исключение ValueError.

<?
try {
    sleep(-5);
} catch (ValueError $e) {
    echo 'Ошибка: ' . $e->getMessage();
}
?>
Ошибка: sleep(): Argument #1 ($seconds) must be greater than or equal to 0
Передача нецелого числа

В PHP 8 тип аргумента строго int. Передача float приведет к ошибке TypeError.

<?
try {
    sleep(2.5);
} catch (TypeError $e) {
    echo 'Ошибка типа: ' . $e->getMessage();
}
?>
Ошибка типа: sleep(): Argument #1 ($seconds) must be of type int, float given
Блокировка основного потока выполнения

В веб-сценариях использование sleep() блокирует обработку всех других запросов в этом же потоке сервера. Для длительных операций предпочтительны фоновые задачи или очереди.

Изменения в последних версиях PHP
PHP 8.0

Функция претерпела значительные изменения. Аргумент seconds теперь имеет строгую типизацию int. Передача значения, не являющегося целым числом, вызывает TypeError. Передача отрицательного числа вызывает ValueError. В более ранних версиях отрицательные значения приводили к предупреждению и немедленному возврату без задержки.

PHP 8.3

Специфических изменений для функции sleep() не вносилось. Рекомендуется учитывать общие улучшения системы типов и обработки ошибок.

Расширенные примеры применения
Ограничение частоты запросов к API

Пример скрипта, который делает последовательные запросы к внешнему API с паузой для соблюдения лимитов.

Пример php
<?
$items = [100, 200, 300];
foreach ($items as $id) {
    $data = file_get_contents("https://api.example.com/item/$id");
    echo "Обработан ID: $id\n";
    sleep(1); // Пауза 1 секунда между запросами
}
?>
Имитация длительной обработки с выводом статуса

В CLI-скрипте можно выводить прогресс во время паузы.

Пример php
<?
function longProcess($steps) {
    for ($i = 1; $i <= $steps; $i++) {
        echo "Шаг $i из $steps...\n";
        // Имитация работы
        sleep(2);
    }
}
longProcess(3);
?>
Шаг 1 из 3...
(пауза 2 секунды)
Шаг 2 из 3...
(пауза 2 секунды)
Шаг 3 из 3...
(пауза 2 секунды)
Создание простого таймера обратного отсчета
Пример php
<?
$countdown = 5;
while ($countdown > 0) {
    echo "$countdown...\n";
    sleep(1);
    $countdown--;
}
echo "Старт!\n";
?>
5...
4...
3...
2...
1...
Старт!
Обработка прерывания сигналом (псевдокод)

На Unix-системах sleep() может быть прервана сигналом. Возвращаемое значение будет ненулевым (количество оставшихся секунд).

Пример php
<?
$seconds = 10;
$result = sleep($seconds);
if ($result > 0) {
    echo "Задержка прервана сигналом. Оставалось спать: $result секунд\n";
}
?>

PHP sleep function comments

En
Sleep Delay execution for a number of seconds