Atualize todos os valores de 60 segundos no /etc/php.ini para 120 para testar. Se você reiniciou o Apache depois que a configuração foi alterada, e ainda tem um problema como descrito, então parece que o php está causando isso com base na descrição.
Eu tenho um sistema CentOS Release 6.3 rodando o Apache httpd 2.2.15 e o PHP 5.3.3.
Meu site PHP está funcionando bem, exceto por uma consulta, que aparentemente atingiu um limite de tempo limite. A consulta agora leva mais de 60 segundos para ser executada e, como resultado, os navegadores dos usuários ficam esperando - por muito mais tempo, cerca de 5 minutos ou mais - antes de mostrar uma página em branco.
Isso me fez imaginar como o Apache / PHP funciona.
Eu configurei um simples caso de teste de script PHP que simplesmente faz o seguinte:
Quando o tempo limite é de 55 segundos, tudo funciona conforme o esperado; meu navegador gira esperando por 55 segundos e depois renderiza o HTML.
Quando eu definir o tempo limite para 65 segundos, o navegador gira por 5 minutos ou mais antes de mostrar uma página completamente em branco. Enquanto isso:
a linha de depuração "Ainda estou aqui" ainda é anexada ao arquivo no servidor, mostrando que o PHP foi bem executado;
o log de acesso do Apache também mostra que a consulta foi executada, retornando um código de status HTTP de 200 e o número correto de bytes que compõem o HTML;
não há erros registrados pelo Apache ou PHP.
Eu tentei alterar algumas configurações que pareciam relevantes:
a diretiva do Apache httpd.conf 'Timeout', de 60 a 120;
a configuração 'default_socket_timeout' para o php.ini, de 60 a 120.
Mas o caso de teste ainda era exatamente o mesmo; o navegador "pendurado", mesmo após a página retornar após 65 segundos. Este é o caso de várias versões do Firefox.
Alguém pode me ajudar a entender como as coisas estão funcionando aqui? E, em segundo lugar, como posso aumentar o limite de tempo limite para que minha consulta lenta leve mais de 60 segundos para ser executada e retorne com êxito seus resultados ao navegador?
Eu teria esperado que, se houvesse um limite no Apache - "não espere mais de 60 segundos para o PHP executar a consulta" - então ele retornaria algum tipo de erro para o navegador após 60 segundos decorrido ou de outro modo registre algum outro erro. Em vez disso, estou vendo o PHP rodando até a conclusão, o log de acesso do Apache me dizendo "ei, tudo correu bem, eu transmiti os 75 bytes de saída para o navegador", mas o próprio navegador fica lá, nunca recebendo essa saída. O que está sendo silenciosamente "desconectado"? Se o Apache nunca envia um erro e permite que o PHP seja executado até a conclusão, por que ele não envia os resultados de volta (como diz no log de acesso)?
Muito obrigado por qualquer ajuda.
Atualize todos os valores de 60 segundos no /etc/php.ini para 120 para testar. Se você reiniciou o Apache depois que a configuração foi alterada, e ainda tem um problema como descrito, então parece que o php está causando isso com base na descrição.
Tags timeout apache-2.2