Mailinglisten-Archive |
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