Apache2 + PHP time out

1

No Ubuntu 10.10 com Apache2 + php, o script

<?
  system("sleep 10000");
?>

não tem tempo limite. Tanto max_execution_time quanto TimeOut não se aplicam.

Existe alguma maneira de garantir que um script seja interrompido?

    
por MathGladiator 30.01.2011 / 07:20

3 respostas

8

  • TimeOut não tem efeito em mod_php.
  • max_execution_time afeta apenas o tempo de execução do próprio script. Chamadas do sistema usando system() ou exec() não contam para o tempo de execução, exceto no Windows.
por 30.01.2011 / 07:54
0

Com o Apache e o mod_php, você terá um problema aqui. Outros métodos, como carregar o php via fcgid ou fastcgi, proporcionam maior controle sobre o gerenciamento de processos / tempo de execução / timeouts / tempo ocioso / etc.

    
por 02.02.2011 / 18:24
0

A resposta de Alvosu está quase certa - mas um pouco concisa.

PHP's sleep () é um invólucro simples sob a API do planejador do sistema operacional. Quando é chamado, o php pára de rodar - então o PHP não pode checar se o relógio está esgotado até que o tempo de suspensão expire e o agendador o adicione de volta à fila de execução, e a CPU processando a próxima instrução.

Embora este exemplo seja bastante artificial (por que você escreveria um script como esse sabendo que você teria um tempo limite em execução), há muitos cenários em que o segmento de execução passa fora do interpretador PHP e, portanto, não obtém uma chance de verificar seu cronômetro - por exemplo quando o script inicia outros processos ou o encadeamento está em uma extensão - como, por exemplo, aguardar uma consulta do db retornar. O problema pode ser evitado pedindo ao sistema para enviar um sinal de volta ao código PHP em um intervalo definido ( pcntl_alarm ) após você define um manipulador de sinal ( pcntl_signal ).

    
por 03.02.2011 / 13:37