Pergunta

Eu tenho duas perguntas a respeito da função sleep() em PHP:

  1. Será que o tempo de sono afeta o limite máximo de tempo de execução dos meus scripts PHP? Às vezes, PHP mostra a mensagem "tempo máximo de execução de 30 segundos excedido". Será que esta mensagem aparecer se eu usar sleep(31)?

  2. Existem riscos quando se utiliza o sleep()function? Custa um monte de desempenho da CPU?

Foi útil?

Solução

Você deve experimentá-lo, basta ter um script que dorme por mais de seu tempo máximo de execução.

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

Spoiler: Sob Linux, tempo de sono é ignorado, mas no Windows, ele conta como tempo de execução.

Outras dicas

Ela afeta apenas tempo de script não chamadas de sistema, como sleep (). Há aparentemente um bug onde no Windows sleep () está incluído. tempo de execução Max é sobre em tempo real, e não o tempo de CPU ou qualquer coisa assim. Você pode alterá-lo no entanto:

  • max_execution_time directiva na sua php.ini. Esta é uma configuração global;
  • ini_set () com a directiva acima. Isso vai mudá-lo apenas para o script atualmente em execução apenas para que a execução;
  • set_time_limit () :. Também uma mudança local

Como para a diferença entre os dois últimos, acredito max_execution_time é uma quantidade fixa. Corrente:

ini_set('max_execution_time', 60);

limitará ao script de 60 segundos. Se depois de 20 segundos de ligar:

set_time_limit(60);

o script será agora limitado a 20 + 60 = 80 segundos.

A partir da PHP sleep () página , há esta nota contribuição do usuário:

A função set_time_limit ():

Nota e a diretiva de configuração max_execution_time só afetam a tempo de execução do próprio script. Qualquer tempo gasto com atividades que aconteçam fora da execução do script como chamadas de sistema usando sistema (), a função de suspensão (), banco de dados de consultas, etc, não está incluído quando se determina o tempo máximo que o script foi executado.

Outros já cobriu os princípios de sono () e PHP limite de tempo de execução de script, mas você também deve estar ciente de um outro risco ao usar períodos de sono realmente longos.

Normalmente, quando um navegador envia uma solicitação para um servidor e não receber quaisquer dados do servidor, a conexão pode expirar. Este prazo depende das configurações do navegador, mas eu li que o IE7 tem um valor padrão de apenas 30 segundos, enquanto Firefox tem um valor padrão de 115 segundos --você pode verificar a sua própria configuração no Firefox, indo para about: config e filtragem para rede .http.keep-alive.timeout (o limite de tempo for especificado em segundos).

Edit: Eu tive as unidades para network.http.keep-alive.timeout e browser.urlbar.search.timeout misturado. Na verdade, é em segundos, não décimos de segundo.

a) Sim, ele conta para o limite de tempo (de modo sleep (31) irá acionar um erro)

b) Ele faz o oposto do que custa o desempenho da CPU - ele permite que outras aplicações utilizar a CPU (quando um aplicativo dorme, o uso da CPU de que a aplicação será próximo de 0%). Além de tomar o tempo longe do usuário, eu realmente não posso pensar de quaisquer riscos da utilização deste.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top