-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathconnection-handling.xml
92 lines (86 loc) · 4.27 KB
/
connection-handling.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: cucinato Status: ready -->
<chapter xml:id="features.connection-handling" xmlns="http://docbook.org/ns/docbook">
<title>Gestione della connessione</title>
<para>
Internamente il PHP mantiene lo stato della connessione. Si hanno
3 possibili stati:
<itemizedlist>
<listitem><simpara>0 - NORMAL</simpara></listitem>
<listitem><simpara>1 - ABORTED</simpara></listitem>
<listitem><simpara>2 - TIMEOUT</simpara></listitem>
</itemizedlist>
</para>
<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'utente. Se invece si raggiunge il limite di tempo
imposto dal PHP (vedere <function>set_time_limit</function>) si attiva lo stato
TIMEOUT.</simpara>
<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'è 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 &php.ini; ignore_user_abort oppure tramite
la corrispondente direttiva <literal>php_value ignore_user_abort</literal>i
del file &httpd.conf; di Apache
oppure con la funzione <function>ignore_user_abort</function>.
Se non si segnala al PHP di ignorare la disconssessione dell'utente lo
script sarà interrotto. Unica eccezione si ha con la registrazione di una funzione
di chiusura utilizzando <function>register_shutdown_function</function>.
Con una funzione di shutdown, quando l'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 <function>connection_aborted</function>.
Questa funzione restituisce &true; se la connessione è stata
interrotta.</simpara>
<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 <option>max_execution_time</option> nel &php.ini; o nel corrispondente
parametro <literal>php_value max_execution_time</literal> nella configurazione di Apache,
oppure con la funzione
<function>set_time_limit</function>. Quando termina il
tempo impostato lo script viene interrotto, se è stata prevista
una funzione di shutdown, questa verrà eseguita. All'interno di
questa funzione si può discriminare se è
stata attivata per lo scadere del timeout utilizzando la
funzione <function>connection_timeout</function>. Questa restituisce 2
se la funzione di shutdown è stata chiamata per lo scadere del tempo a disposizione.
</simpara>
<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'utente. Infatti il PHP
continua a tenere traccia della disconnessione dell'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 <function>connection_status</function>
restituirà 3.
</simpara>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->