phpbar.de logo

Mailinglisten-Archive

[php] PHP als Apache-Modul

[php] PHP als Apache-Modul

Manuel Hossfeld lists_(at)_hossfeld.de
Mon, 1 Nov 1999 12:22:15 +0100


Hi Oliver,

> Für microtime() kann ich das aber wirklich nicht bestätigen.
> Funktioniert wie es soll:
 
Nee, leider nicht. Ich hab's eben nochmal überprüft.

Dieser Code...
 
> $compound =  explode (" ", microtime());
> $normalzeit = date ("d.m.Y, H:i:s", $compound [1] );
> $msec_start =  $compound [0] ;
> echo $normalzeit;
> echo "<br>";
> 
> sleep( 2 );
> 
> $compound =  explode (" ", microtime());
> $normalzeit = date ("d.m.Y, H:i:s", $compound [1] );
> $msec_stop =  $compound [0] ;
> echo $normalzeit;
> echo "<br>";
> 
> echo "<br>";
> echo "Zeit zwischen Start und Stop in Sekunden: " ;
> echo $msec_stop - $msec_start;
 
... produziert mit PHP/Win32 tatsächlich sowas wie:

----
01.11.1999, 11:39:46
01.11.1999, 11:39:48

Zeit zwischen Start und Stop in Sekunden: 1.910718
----

Aber mehr oder minder nur aus "Zufall", weil Du einem kleinen Denkfehler
aufgessen bist: Du ziehst am Ende Microsekunden von Microsekunden ab (zumindest
suggeriert das der Variablenname), und das sollte doch dann eigentlich...
genau: wieder Microsekunden geben. Du verkaufst uns das in der Ausgabe aber als
eine Angabe in _Sekunden_ ! Du siehst den Wiederspruch? (Abgesehen davon: Hat
es Dich nie stutzig gemacht, daß dabei immer nur 1,9... rauskommt, also eine
Zahl, die Sogar KLEINER ist als die "geschlafenen" 2 Sekunden?!).

Es kommt aber noch besser. Wenn ich genau den gleichen Code auf meiner
Linux-Büchse ausführe, passiert folgendes:

----
01.11.1999, 11:48:21
01.11.1999, 11:48:23

Zeit zwischen Start und Stop in Sekunden: 0.003512
----

Hoppla! Ist mein alter Cyrix P166 etwa doch viel schneller als ein PII-400, daß
er für zwei Sekunden nur noch knapp 0.004s "braucht"? ;-)
Wohl kaum...

Was sagt denn eigentlich die Doku zu microtime?

"Returns the string "msec sec" where sec is the current time measured in the number of seconds since the Unix Epoch (0:00:00
January 1, 1970 GMT), and msec is the microseconds part."

Aha. Hinter dem Blank kommen die Sekunden seit 1970, also das gleiche was auch
time() liefert. Und vor dem Blank ist also der "microseconds part". Das kann
man natürlich unterschiedlich interpretieren. Einmal als "Anzahl der
Mikrosekunden, die seit der angegeben "Unix-Sekunde" verstrichen sind", oder als
"Anteil (im Sinne von "Bruch"/"Dezimalzahl") der Microsekunden". Im ersten Fall
müsste "msec" immer ganzzahlig sein, im zweiten immer 0,irgendwas.

Tja, bei Windoof ist es weder das eine noch das andere. Msec ist dort vielmehr
eine Gleitkommazahl zwischen 1,... und zweihundertirgendwas,... (NICHT 256 - der
Wertebereich ist offenbar größer als ein Byte).

Die Werte die Microtime() ausspuckt sehen dann also z.B. so aus:

94.88478600 941452786
1.88746900 941452407
268.41051100 941452405
usw.

Schau'n wir uns das mal unter Linux an...
Da kommt dann eher sowas:

0.41391100 941453301
0.82765800 941454164
usw.

PHP/Linux scheint sich also für die "zweite Variante" entschieden zu haben. Also
0<msec<1. Und so ist es IMHO auch richtig.

Und bevor Du fragst: Ich habe keine Ahnung, WAS denn nun "msec" auf Win32
aussagen soll. Es sieht ja schon so ein bisschen so aus also wären's _nochmal_
Sekunden (was einen dann auf Ideen wie in Deinem Code bringt), aber eben nicht
genau. Und vor allem: Wozu? Die Sekunden hat man doch schon nach dem Blank in
"sec"...

Jetzt werden vielleicht einige aufschreien und sagen:
In der Doku steht aber auch...
"This function is only available on operating systems that support the
gettimeofday() system call."
Tja... Hat Windoof einen gettimeofday() system call? Keine Ahnung. Das sollte
jemand beantworten, der sich mit Windows system calls auskennt.
Unabhängig davon bin ich der Meinung: Wenn es diesen Systemcall unter Windoof
NICHT gibt, dann sollte PHP/Win32 an der Stelle doch besser gar nichts
zurückliefern, als irgendeinen nicht nachvollziehbaren Wert.

> <grummel> Allerdings scheint usleep() nicht zu funktionieren, jedenfalls
> auf einer
> W95-Kiste</grummel> 

Inwiefern? Das habe ich jetzt noch nicht getestet. Aber wundern tut es mich
überhaupt nicht. Wäre nur ein weiteres Indiz dafür, daß das
"Microsekunden-Handling" von PHP/Win32 im A...imer ist.

CU,
Manuel


php::bar PHP Wiki   -   Listenarchive