Учитывается ли время ожидания для ограничения времени выполнения?
Вопрос
У меня есть два вопроса, касающиеся sleep()
функция в PHP:
Влияет ли время ожидания на максимальное время выполнения моих PHP-скриптов?Иногда PHP показывает сообщение "превышено максимальное время выполнения в 30 секунд".Появится ли это сообщение, если я использую
sleep(31)
?Существуют ли какие-либо риски при использовании
sleep()
функция?Сильно ли это влияет на производительность процессора?
Решение
Вы должны попробовать это, просто у вас есть скрипт, который находится в спящем режиме дольше вашего максимального времени выполнения.
<?php
sleep(ini_get('max_execution_time') + 10);
?>
Спойлер: В Linux время ожидания игнорируется, но в Windows оно засчитывается как время выполнения.
Другие советы
Это влияет только на время скрипта, а не на системные вызовы, такие как sleep().По-видимому, существует ошибка, из-за которой в Windows включена функция sleep().Максимальное время выполнения относится к реальному времени, а не к процессорному времени или чему-то подобному.Однако вы можете изменить это:
- максимальное время выполнения директива в вашем php.ini.Это глобальная настройка;
- Используя ini_set() ини_набор() с вышеуказанной директивой.Это изменит его только для текущего выполняемого скрипта только для этого выполнения;
- set_time_limit() установить временной предел():также локальное изменение.
Что касается разницы между последними двумя, я считаю, что 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, перейдя по о программе: конфигурация и фильтрация для сеть.http.keep-alive.тайм-аут (ограничение по времени указано в секундах).
Редактировать:У меня были перепутаны блоки для network.http.keep-alive.timeout и browser.urlbar.search.timeout.Это действительно занимает секунды, а не десятые доли секунды.
a) Да, это относится к ограничению по времени (поэтому sleep (31) вызовет ошибку).
б) Это приводит к обратному снижению производительности процессора - это позволяет другим приложениям использовать процессор (когда приложение переходит в спящий режим, загрузка процессора этого приложения будет близка к 0%).Помимо того, что это отнимает время у пользователя, я действительно не могу думать о каких-либо рисках, связанных с этим использованием.