<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Tratamento de Conexões</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Características" HREF="features.html"><LINK REL="PREVIOUS" TITLE="Usando arquivos remotos" HREF="features.remote-files.html"><LINK REL="NEXT" TITLE="Conexão Permanente com o Banco de Dados" HREF="features.persistent-connections.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="chapter" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="features.remote-files.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="features.persistent-connections.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="chapter" ><H1 ><A NAME="features.connection-handling" >Capítulo 40. Tratamento de Conexões</A ></H1 ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B >O texto se aplica a versão 3.0.7 ou superior.</P ></BLOCKQUOTE ></DIV ><P > O status de uma conexão é mantido internamente no PHP. Existem 3 estados possíveis: <P ></P ><UL ><LI ><P >0 - NORMAL</P ></LI ><LI ><P >1 - ABORTED</P ></LI ><LI ><P >2 - TIMEOUT</P ></LI ></UL > </P ><P > Quando um script PHP está sendo executado normalmente, o estado NORMAL está ativo. Se o cliente remoto disconecta, o estado ABORTED(abordado) é ligado. Uma disconexão do cliente remoto é normalmente causada pelo usuário apertando o botão STOP. Se o tempo limite imposto pelo PHP (veja <A HREF="function.set-time-limit.html" ><B CLASS="function" >set_time_limit()</B ></A >) é alcançado, o estado TIMEOUT (tempo acabado) é ligado.</P ><P > Você pode decidir se quer ou não que a disconexão do cliente cause que seu script seja abortado. As vezes é útil sempre fazer o seu script rodar até completar mesmo se não há nenhum navegador remoto recebendo a saída. O comportamento padrão, no entanto, é de seu script ser abortado quando o cliente remoto disconecta. Esse comportamento pode ser configurado através da diretiva ignore_user_abort <TT CLASS="filename" >php.ini</TT > assim como pela diretiva correspondente do Apache .conf, "php_value ignore_user_abort" ou com a função <A HREF="function.ignore-user-abort.html" ><B CLASS="function" >ignore_user_abort()</B ></A >. Se você não disser para o PHP ignorar o abort do usuário e ele abortar, seu script será finalizado. A única exceção é se você tiver registrado uma função de finalização usando <A HREF="function.register-shutdown-function.html" ><B CLASS="function" >register_shutdown_function()</B ></A >. Com uma função de finalização, quando um usuário remoto clica no botão STOP, a próxima vez que seu script tentar gerar alguma saída, o PHP detectará que a conexão foi abortada e a função de finalização é chamada. Essa função de finalização também será chamada no fim do seu script mesmo terminando normalmente, então para fazer algo diferente caso o cliente disconecte, você pode usar a função <A HREF="function.connection-aborted.html" ><B CLASS="function" >connection_aborted()</B ></A >. Essa função retorna <TT CLASS="constant" ><B >TRUE</B ></TT > se a conexão foi abortada.</P ><P > Seu script também pode ser finalizado pelo timer interno. O tempo limite padrão é de 30 segundos. Pode ser mudado usando a diretiva <CODE CLASS="option" >max_execution_time</CODE > <TT CLASS="filename" >php.ini</TT > ou a diretiva do Apache .conf correspondente <TT CLASS="literal" >php_value max_execution_time</TT > assim como com a função <A HREF="function.set-time-limit.html" ><B CLASS="function" >set_time_limit()</B ></A >. Quando o timer chega ao limite, o script será abortado e assim como o caso acima de disconexão, se uma função de finalização foi registrada, ela será chamada. Dentro da função de finalização você pode checar se a causa da finalização foi estouro do tempo limite chamando a função <A HREF="function.connection-timeout.html" ><B CLASS="function" >connection_timeout()</B ></A >. Essa função retornará <TT CLASS="constant" ><B >TRUE</B ></TT > se o a função de finalização foi chamada pelo tempo ter acabado. </P ><P > Uma coisa a ser notada é que ambos os estados ABORTED e TIMEOUT podem estar ligados ao mesmo tempo. Isso é possível se você disser ao PHP para ignorar o abort do usuário. O PHP continuará a notar o fato que o usuário pode ter quebrado a conexão, mas o script continuará executando. Se então ele alcançar o tempo limite, ele será abortado e sua função de finalização, se houver, será chamada. Nesse ponto, você terá que <A HREF="function.connection-status.html" ><B CLASS="function" >connection_status()</B ></A > retorna 3. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="features.remote-files.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="features.persistent-connections.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Usando arquivos remotos</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="features.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Conexão Permanente com o Banco de Dados</TD ></TR ></TABLE ></DIV ></BODY ></HTML >