phpbar.de logo

Mailinglisten-Archive

[php] ignore_user_abort()

[php] ignore_user_abort()

Egon Schmid (_(at)_vacation) eschmid_(at)_php.net
Mon, 19 Feb 2001 12:05:16 +0100


Ulf Wendel wrote:
> 
> "Egon Schmid (_(at)_vacation)" schrieb:
> >
> > Ulf Wendel wrote:
> > >
> > > Alexander Ott schrieb:
> > > > Ich habe ein kleines Problem mit der Funktion
> > > > ignore_user_abort(). Welchen Parameter muss man da
> > > > übergeben, wenn man will, dass das Script weiterläuft, wenn der
> > > > User den Browser schliesst, oder eine andere URL aufsucht.
> > > >
> > > > Aus dem Handbuch wird man nicht schlau, dort wird nur
> > > > beschrieben, dass man 0 für normal, 1 für Abort und
> > > > 2 für Timeout übergeben soll ?????
> > >
> > > Generell bei solchen Fragen:
> > >
> > > [1] http://www.zugeschaut-und-mitgebaut.de/php/i.html
> > > [2]
> > > http://www.zugeschaut-und-mitgebaut.de/php/function.ignore_user_abort.html
> > > [3] http://lxr.php.net/source/php4/ext/standard/basic_functions.c#2159
> >
> > Hi Ulf, leider helfen bei solchen Fragen die Funktionstabellen von
> > Hartmut nicht wirklich weiter.
> 
> Manchmal schon, zumindest ist es geeignet die erste Frage zu
> beantworten, was an ignore_user_abort() zu übergeben ist. Ob es dann
> hinterher das tut, was es soll, steht auf einem anderem Blatt.

Deshalb hab ich auch gesagt, man soll halt selber experimentieren, ob
das was in der Doku steht und was in den Funktionstabellen von Hartmut
steht, auch stimmt. Bei mehr als 2200 Funktionen könnten durchaus Fehler
in der einen oder anderen Fassung liegen. Die Dokumentation und die
Funktionsprototypen sind in Wirklichkeit ja kein C-Programmcode, sondern
reiner ASCII-Text.
 
> > > 2173         case 1:
> > > 2174             if (zend_get_parameters_ex(1, &arg) == FAILURE) {
> > > 2175                 RETURN_FALSE;
> > > 2176             }
> > > 2177             convert_to_boolean_ex(arg);
> > >
> > > Ein Übergabewert? convert_to_boolean()

Das macht mich halt auch stutzig. Wenn man die Werte 0, 1 oder 2
übergibt und dann nach Boolean konvertiert, dann kann nichts
vernünftiges rauskommen.

> > > 2178             PG(ignore_user_abort) = (zend_bool) Z_LVAL_PP(arg);
> > > 2179             break;
> > > 2180         default:
> > > 2181             WRONG_PARAM_COUNT;
> > > 2182             break;
> > > ...
> > >
> > > Die Funktion frißt nichts anderes als einen Boolean. In PHP stehen Dir
> > > zur einfachen Arbeit mit Booleans die vordefinierten Konstanten true und
> > > false zur Verfügung.

Fazit: Beides, die Doku und die Funktionstabellen, lügen. Wenn ich das
entsprechende Kapitel im Handbuch anschaue, dann steht es dort aber
richtig. Der Typ Boolean wurde ja erst in Version 4 eingeführt und stand
früher als Integer (0 oder ungleich 0) zur Verfügung. 

> Damit ist es - wie üblich - egal, was ich von meinem PHP Skript aus an
> die Funktion übergebe, es wird als Boolean gewertet. Ob dies adäquat ist
> für die Aufgabe, oder ob es nicht besser ein Integer sein sollte,
> darüber will ich kein Urteil fällen. Wenn die Dokumentation aus
> didaktischen Gründen einen Integer aufweist, so empfinde ich dies als
> inkonsistent. Schließlich kann die aktuelle Implementation nur
> "an"/"aus" verarbeiten.

Es sind keine didaktischen Gründe sondern historische. Früher (PHP 3)
gab es kein Boolean und das Handbuch wurde eben für die Version 3
geschrieben. So wie im Handbuch beschrieben, werden nur die Zahlen 0
oder ungleich 0 erwartet und nicht, die Zahlen 0, 1 oder 2. In der
Version 4 müßte also auch ignore_user_abort (TRUE) oder
ignore_user_abort (FALSE) möglich sein. ignore_user_abort() sollte dann
das frühere Setting zurückliefern.

-Egon

-- 
SIX Offene Systeme GmbH       ·        Stuttgart  -  Berlin 
Sielminger Straße 63   ·    D-70771 Leinfelden-Echterdingen
Fon +49 711 9909164 · Fax +49 711 9909199 http://www.six.de
Besuchen Sie uns auf der CeBIT 2001,  Halle 6,  Stand F62/4


php::bar PHP Wiki   -   Listenarchive