<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'features.connection-handling.php',
    1 => 'Gestione della connessione',
    2 => 'Gestione della connessione',
  ),
  'up' => 
  array (
    0 => 'features.php',
    1 => 'Caratteristiche',
  ),
  'prev' => 
  array (
    0 => 'features.remote-files.php',
    1 => 'Utilizzo di file remoti',
  ),
  'next' => 
  array (
    0 => 'features.persistent-connections.php',
    1 => 'Connessioni Persistenti ai Database',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'features/connection-handling.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.connection-handling" class="chapter">
  <h1 class="title">Gestione della connessione</h1>


  <p class="para">
   Internamente il PHP mantiene lo stato della connessione. Si hanno
   3 possibili stati:
   <ul class="itemizedlist">
    <li class="listitem"><span class="simpara">0 - NORMAL</span></li>
    <li class="listitem"><span class="simpara">1 - ABORTED</span></li>
    <li class="listitem"><span class="simpara">2 - TIMEOUT</span></li>
   </ul>
  </p>

  <p class="simpara">
   Quendo uno script PHP viene eseguito normalmente si trova nello stato NORMAL.
   Se il client remoto si disconnette viene attivato il flag ABORTED.
   La disconnessione di un client remoro è generalmente causata dalla pressione
   del tasto STOP da parte dell&#039;utente. Se invece si raggiunge il limite di tempo
   imposto dal PHP (vedere <span class="function"><a href="function.set-time-limit.php" class="function">set_time_limit()</a></span>) si attiva lo stato
   TIMEOUT.</p>

  <p class="simpara">
   Si può decidere se la disconnessione del client debba fare
   interrompere lo script o meno. In certi casi è più pratico lasciare
   finire lo script anche se non c&#039;è più il browser remoto a ricevere
   i dati.  Tuttavia il comportamento di default è di interrompere
   lo script quando il client remoto si disconnette. Questo comportamento può
   essere impostato tramite la direttiva di <var class="filename">php.ini</var> ignore_user_abort oppure tramite
   la corrispondente direttiva <code class="literal">php_value ignore_user_abort</code>i
   del file <var class="filename">httpd.conf</var> di Apache
   oppure con la funzione <span class="function"><a href="function.ignore-user-abort.php" class="function">ignore_user_abort()</a></span>.
   Se non si segnala al PHP di ignorare la disconssessione dell&#039;utente lo
   script sarà interrotto. Unica eccezione si ha con la registrazione di una funzione
   di chiusura utilizzando <span class="function"><a href="function.register-shutdown-function.php" class="function">register_shutdown_function()</a></span>.
   Con una funzione di shutdown, quando l&#039;utente remoto preme il bottone di STOP,
   alla prima occasione in cui lo script tenterà di produrre un output, il PHP intercetterà
   che la connessione è interrotta e richiamerà la funzione di shutdown.
   Questa funzione sarà richiamata anche al normale termine dello
   script, pertanto per eseguire passi differenti in caso di disconnessione
   del client occorre utilizzare la funzione <span class="function"><a href="function.connection-aborted.php" class="function">connection_aborted()</a></span>.
   Questa funzione restituisce <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se la connessione è stata
   interrotta.</p>

  <p class="simpara">
   Uno script può essere fermato dal timer incorporato nel PHP.
   Per default il timeout è impostato a 30 secondi. Tale limite può essere variato
   agendo sulla direttiva <strong class="option unknown">max_execution_time</strong> nel <var class="filename">php.ini</var> o nel corrispondente
   parametro  <code class="literal">php_value max_execution_time</code> nella configurazione di Apache,
   oppure con la funzione
   <span class="function"><a href="function.set-time-limit.php" class="function">set_time_limit()</a></span>. Quando termina il
   tempo impostato lo script viene interrotto, se è stata prevista
   una funzione di shutdown, questa verrà eseguita. All&#039;interno di
   questa funzione si può discriminare se è
   stata attivata per lo scadere del timeout utilizzando la
   funzione <span class="function"><strong>connection_timeout()</strong></span>. Questa restituisce 2
   se la funzione di shutdown è stata chiamata per lo scadere del tempo a disposizione.
  </p>

  <p class="simpara">
   Un aspetto che occorre notare sui stati ABORTED e TIMEOUT è
   che possono essere attivi contemporaneamente. Questo può accadere
   se si è impostato il PHP affinchè ignori le interruzioni da parte dell&#039;utente. Infatti il PHP
   continua a tenere traccia della disconnessione dell&#039;utente, ma, semplicemente, non viene
   interrotto lo script. Quindi, quando termina il tempo, lo script sarà interrotto e verrà
   richiamata la funzione di shutdown, se presente. In questa situazione
   si avrà che <span class="function"><a href="function.connection-status.php" class="function">connection_status()</a></span>
   restituirà 3.
  </p>
 </div>
<?php manual_footer($setup); ?>