Resolver problemas

Maximum execution time of X seconds exceeded in x.php

Revisto a 3 min de leitura errores php php

A mensagem:

Maximum execution time of X seconds exceeded in x.php

confirma que o processo atingiu o limite max_execution_time do PHP. O ficheiro e a linha indicam onde o temporizador se esgotou, mas não demonstram por si sós que componente consumiu o tempo.

Reproduza a operação exata e consulte primeiro o registo da aplicação e do PHP. Se se tratar de um pedido lento reproduzível, utilize o PHP X-Ray para verificar se o tempo se concentra numa consulta SQL, numa chamada externa, numa função ou num componente concreto. Exclua também ciclos, novas tentativas e volumes de dados inesperados.

Só aumente o limite quando a operação for legítima, delimitada e precisar razoavelmente de mais tempo. Verifique que versão do PHP executa o caminho, aceda a cPanel > Select PHP Version > Options e defina max_execution_time no menor valor finito que permita concluir o teste. A alteração afeta todos os sites que utilizem essa versão.

Não aumente o valor progressivamente até o erro desaparecer e não o defina sem limite. O PHP utiliza este temporizador como proteção contra scripts defeituosos. Além disso, o servidor web e outros componentes podem aplicar tempos de espera independentes.

Depois do teste, restaure o valor anterior. Se o processo voltar a esgotar um valor razoável, corrija a operação ou o componente identificado em vez de continuar a aumentá-lo. Se suspeitar de uma limitação de recursos, verifique as falhas registadas de CPU, memória, entrada, IO ou processos: um consumo elevado sem uma falha de limite não demonstra que esse limite tenha terminado ou tornado lento o pedido.

Tempo do PHP e tempo total do pedido

Em sistemas Unix, max_execution_time não mede necessariamente todo o tempo de relógio decorrido: as esperas de certas operações externas podem ficar fora da sua contagem. No Windows o seu comportamento é diferente. Por isso, um tempo total observado no navegador não se compara diretamente com esse limite. Consulte a definição do PHP.

Para importações ou trabalhos longos, considere dividir o trabalho em lotes ou executá-lo através de uma tarefa CLI compatível, com controlo de erros e de progresso. O CLI também pode ter limites próprios e não evita as quotas do alojamento. Antes de repetir uma operação interrompida, verifique que dados já foram guardados para não os duplicar.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.