Anmerkung
:
Folgendes
trifft
auf
die
Versionen
3.0.7
und
später
zu
.
PHP
erhält
intern
einen
Verbindungsstatus
.
Dieser
kann
drei
Zustände
annehmen
:
Wenn
ein
PHP-Skript
aktiv
ist
,
ist
der
Status
üblicherweise
NORMAL
.
Sollte
der
Client-Rechner
die
Verbindung
beenden
,
wird
der
Status
auf
ABORTED
gesetzt
.
Ein
clientseitiges
Beenden
der
Verbindung
wird
für
gewöhnlich
veranlaßt
,
wenn
der
Benutzer
den
STOP-Button
seines
Browsers
drückt
.
Wenn
das
eingestellte
Zeitlimit
(
siehe
set_time_limit(
)
)
überschritten
wird
,
wird
der
Status
TIMEOUT
gesetzt
.
Sie
können
entscheiden
,
ob
der
Verbindungsabbruch
seitens
des
Clients
den
Abbruch
des
Skriptes
zur
Folge
haben
soll
.
Manchmal
ist
es
sinnvoll
,
Skripte
sauber
zu
beenden
,
auch
wenn
kein
Browser
mehr
zur
Verfügung
steht
,
der
die
Ausgabe
empfängt
.
Die
Abarbeitung
eines
Skriptes
wird
standardmäßig
abgebrochen
,
wenn
der
Client
die
Verbindung
beendet
.
Dieses
Verhalten
kann
sowohl
durch
die
Option
ignore_user_abort
in
der
Konfigurationsdatei
php3.ini
,
durch
die
entsprechende
Option
php3_ignore_user_abort
in
der
Apache-Konfigurationsdatei
als
auch
durch
ignore_user_abort(
)
beeinflußt
werden
.
Wenn
PHP
nicht
angewiesen
wird
,
einen
Verbindungsabbruch
durch
den
Benutzer
zu
ignorieren
und
die
Verbindung
dann
durch
den
Benutzer
beendet
wird
,
wird
die
Abarbeitung
des
Scriptes
abgebrochen
.
Die
einzige
Ausnahme
ist
,
wenn
durch
die
Funktion
register_shutdown_function(
)
eine
Shutdown-Funktion
angegeben
wird
,
die
bei
clientseitigem
Abbruch
ausgeführt
wird
.
Wenn
dann
der
Benutzer
den
STOP-Button
seines
Browsers
drückt
,
wird
PHP
bei
der
nächsten
Ausgabe
des
Skriptes
feststellen
,
dass
die
Verbindung
abgebrochen
wurde
und
die
Shutdown-Funktion
aufrufen
.
Diese
Shutdown-Funktion
wird
auch
aufgerufen
,
wenn
das
Skript
auf
normalem
Wege
beendet
wird
,
daher
sollte
man
,
wenn
man
für
den
Fall
eines
Benutzerabbruchs
etwas
anderes
vorgesehen
hat
,
die
Funktion
connection_aborted(
)
verwenden
.
Sie
gibt
TRUE
zurück
,
wenn
die
Verbindung
abgebrochen
wurde
.
Ein
Skript
kann
ebenfalls
durch
den
eingebauten
Script-Timer
beendet
werden
.
Der
Standard-Timeout
beträgt
30
Sekunden
.
Er
kann
durch
die
Option
max_execution_time
in
der
php3.ini
,
durch
den
entsprechenden
Eintrag
php3_max_execution_time
in
der
Apache-Konfigurationsdatei
oder
durch
die
Funktion
set_time_limit(
)
beeinflußt
werden
.
Bei
Zeitüberschreitung
wird
das
Skript
beendet
und
,
genau
wie
im
obigen
Fall
des
Verbindungsabbruchs
,
eine
registrierte
Shutdown-Funktion
ausgeführt
.
Um
zu
überprüfen
,
ob
es
sich
um
einen
Abbruch
aufgrund
von
Zeitüberschreitung
handelt
,
kann
die
Funktion
connection_timeout(
)
benutzt
werden
.
Sie
gibt
TRUE
zurück
,
wenn
es
sich
um
eine
Zeitüberschreitung
handelt
.
Zu
bemerken
ist
,
dass
der
ABORTED
und
der
TIMEOUT-Status
gleichzeitig
auftreten
können
.
Dies
ist
möglich
,
wenn
PHP
angewiesen
wird
,
Benutzerabbrüche
zu
ignorieren
.
PHP
wird
feststellen
,
dass
der
Benutzer
die
Verbindung
abgebrochen
hat
,
das
Skript
allerdings
läuft
weiter
.
Sollte
es
dann
das
Zeitlimit
erreichen
,
wird
es
abgebrochen
und
eine
Shutdown-Funktion
,
wenn
definiert
,
wird
aufgerufen
.
Zu
diesem
Zeitpunkt
kann
man
feststellen
,
dass
connection_timeout(
)
und
connection_aborted(
)
TRUE
zurückgeben
.
Diese
beiden
Statusmöglichkeiten
können
auch
durch
einen
Aufruf
der
Funktion
connection_status(
)
abgefragt
werden
.
Sie
liefert
ein
Bitfeld
des
aktiven
Status
.
Wenn
beispielsweise
TIMEOUT
und
ABORTED
aktiv
sind
,
wird
3
zurückgegeben
.