Mate o processo do PHP quando a conexão é fechada

2

Publicamos a pergunta a seguir no SO, mas achamos que pode haver uma solução baseada em servidor.

link

Estou executando um Ubuntu VPS para executar esse script e estou tentando fazer com que o script morra quando o usuário fecha a janela / guia do navegador.

Existem várias funções baseadas em PHP para ver se a conexão ainda está aberta, mas nenhuma funciona (confie em mim, testei todas).

Alguma idéia criativa de como eu posso fazer isso através do servidor?

    
por user838437 29.01.2012 / 16:41

3 respostas

1

Quando você estava experimentando estes métodos, você forçou o PHP a liberar o buffer? Até que algo seja escrito a partir do script, o PHP / Apache não poderá ver se o cliente ainda está conectado. Tenha em mente que o PHP não está se comunicando diretamente com o cliente - está se comunicando com o Apache.

Os comentários são a parte inferior do connection_aborted manual do PHP que contém várias estratégias.

    
por 30.01.2012 / 22:19
1

link

O TCP requer que TODOS os pacotes enviados sejam reconhecidos pelo cliente e, portanto, o servidor deve detectar isso como um tempo limite de envio no mínimo ...

session_write_close();//to make flush work
while (connection_status() !== 0) {//this will work if the connection is properly shutdown
                                   //or if it is simply disconnected...
  sleep(1);
  echo "whatever";
  ob_flush();
  flush();
}
    
por 02.04.2015 / 00:15
0

Se o navegador da Web não estiver fechando a conexão, seu script provavelmente continuará em execução até a conexão expirar ou atingir o tempo máximo de execução do PHP.

A melhor coisa em que posso pensar seria usar o AJAX para "pingar" o servidor regularmente e parar quando ele não tiver recebido esses pings por algum tempo. Ou toda vez que receber um ping, dê ao script PHP mais 5 segundos para executar.

Ou você pode tentar usar o AJAX para enviar uma mensagem para o servidor quando o usuário fecha a janela, mas acho que a capacidade está desabilitada em alguns navegadores mais recentes porque é usada com frequência para anúncios pop-up irritantes.

    
por 29.01.2012 / 17:03