У меня есть два вопроса относительно sleep()
функция в PHP:
Влияет ли время ожидания на ограничение максимального времени выполнения моих PHP-скриптов? Иногда PHP показывает сообщение «превышено максимальное время выполнения 30 секунд». Появится ли это сообщение, если я использую sleep(31)
?
Есть ли риски при использовании sleep()
функционировать? Стоит ли много производительности процессора?
Вы должны попробовать это, просто имейте сценарий, который спит больше вашего максимального времени выполнения.
<?php
sleep(ini_get('max_execution_time') + 10);
?>
Спойлер: В Linux время сна игнорируется, но в Windows оно считается временем выполнения.
Это влияет только на время сценария, а не на системные вызовы, такие как sleep (). Есть, видимо, ошибка, когда в Windows включен sleep (). Максимальное время выполнения составляет около реального времени, а не процессорного времени или чего-то подобного. Вы можете изменить это однако:
Что касается разницы между двумя последними, я считаю, что max_execution_time является фиксированной величиной. Бег:
ini_set('max_execution_time', 60);
ограничит сценарий до 60 секунд. Если через 20 секунд вы позвоните:
set_time_limit(60);
сценарий теперь будет ограничен до 20 + 60 = 80 секунд.
От PHP sleep () страница, есть это добавленное пользователем примечание:
Примечание: функция set_time_limit ()
и директива конфигурации
max_execution_time влияет только на
время выполнения самого скрипта.
Любое время, потраченное на деятельность, которая
происходит за пределами исполнения
скрипт, такой как системные вызовы с использованием
system (), функция sleep (),
запросы к базе данных и т. д. не включены
при определении максимального времени
скрипт был запущен.
Другие уже рассмотрели основы ограничения времени выполнения сценариев sleep () и PHP, но вам также следует помнить о другом риске при использовании очень длинных периодов ожидания.
Обычно, когда браузер отправляет запрос на сервер и не получает никаких данных с сервера, время соединения может истечь. Это ограничение по времени зависит от конфигурации браузера, но я читал, что IE7 имеет значение по умолчанию всего 30 секунд, в то время как Firefox имеет значение по умолчанию 115 секунд—Вы можете проверить свою собственную конфигурацию в Firefox, перейдя в о: конфигурации и фильтрация для network.http.keep-alive.timeout (ограничение по времени указывается в секундах).
Изменить: У меня были смешаны модули для network.http.keep-alive.timeout и browser.urlbar.search.timeout. Это действительно в секундах, а не в десятых долях секунды.
а) Да, он учитывает ограничение по времени (поэтому sleep (31) вызовет ошибку)
б) Это противоположно стоимости процессора — он позволяет другим приложениям использовать процессор (когда приложение спит, загрузка процессора этим приложением будет около 0%). Помимо отвлечения времени от пользователя, я не могу думать о каких-либо рисках использования этого.