Считается ли время сна для ограничения времени выполнения?

У меня есть два вопроса относительно sleep() функция в PHP:

  1. Влияет ли время ожидания на ограничение максимального времени выполнения моих PHP-скриптов? Иногда PHP показывает сообщение «превышено максимальное время выполнения 30 секунд». Появится ли это сообщение, если я использую sleep(31)?

  2. Есть ли риски при использовании sleep()функционировать? Стоит ли много производительности процессора?

46

Решение

Вы должны попробовать это, просто имейте сценарий, который спит больше вашего максимального времени выполнения.

<?php
sleep(ini_get('max_execution_time') + 10);
?>

Спойлер: В Linux время сна игнорируется, но в Windows оно считается временем выполнения.

82

Другие решения

Это влияет только на время сценария, а не на системные вызовы, такие как sleep (). Есть, видимо, ошибка, когда в Windows включен sleep (). Максимальное время выполнения составляет около реального времени, а не процессорного времени или чего-то подобного. Вы можете изменить это однако:

  • max_execution_time директива в вашем 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 секунд.

8

От PHP sleep () страница, есть это добавленное пользователем примечание:

Примечание: функция set_time_limit ()
и директива конфигурации
max_execution_time влияет только на
время выполнения самого скрипта.
Любое время, потраченное на деятельность, которая
происходит за пределами исполнения
скрипт, такой как системные вызовы с использованием
system (), функция sleep (),
запросы к базе данных и т. д. не включены
при определении максимального времени
скрипт был запущен.

7

Другие уже рассмотрели основы ограничения времени выполнения сценариев sleep () и PHP, но вам также следует помнить о другом риске при использовании очень длинных периодов ожидания.

Обычно, когда браузер отправляет запрос на сервер и не получает никаких данных с сервера, время соединения может истечь. Это ограничение по времени зависит от конфигурации браузера, но я читал, что IE7 имеет значение по умолчанию всего 30 секунд, в то время как Firefox имеет значение по умолчанию 115 секунд—Вы можете проверить свою собственную конфигурацию в Firefox, перейдя в о: конфигурации и фильтрация для network.http.keep-alive.timeout (ограничение по времени указывается в секундах).

Изменить: У меня были смешаны модули для network.http.keep-alive.timeout и browser.urlbar.search.timeout. Это действительно в секундах, а не в десятых долях секунды.

0

а) Да, он учитывает ограничение по времени (поэтому sleep (31) вызовет ошибку)

б) Это противоположно стоимости процессора — он позволяет другим приложениям использовать процессор (когда приложение спит, загрузка процессора этим приложением будет около 0%). Помимо отвлечения времени от пользователя, я не могу думать о каких-либо рисках использования этого.

-5
По вопросам рекламы [email protected]