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

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

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

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

  • Существуют ли какие-либо риски при использовании функции sleep()? Это стоит много производительности процессора?

4b9b3361

Ответ 2

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

  • max_execution_time в вашем php.ini. Это глобальная настройка;
  • Используя ini_set() с указанной директивой. Это изменит его только для выполняемого в настоящее время script только для этого выполнения;
  • set_time_limit(): также локальное изменение.

Что касается разницы между двумя последними, я считаю max_execution_time фиксированной величиной. Продолжительность:

ini_set('max_execution_time', 60);

будет ограничено до script до 60 секунд. Если через 20 секунд вы вызываете:

set_time_limit(60);

script теперь будет ограничено 20 + 60 = 80 секунд.

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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