Hallo,
Ich bin gerade über einen PHP-Fehler gestossen, der mich fast an den Rande des wahnsinns gebracht hat. Folgender Code funzt net (mit generierten DE-Locales!)
, weil PHP die länder-zahlenformatierung beim serialize nicht beachtet, beim unserialize schon. In folge dessen führt meine schöne session.set_save_handler-routine, die die PHP-$_SESSION-Variablen in eine Datenbank abgelegt hat, zu Datenverfälschungen. (aus den 5mrd wird eine 5) *koch*
Ich hab in der PHP-doku nachgelesen und verstehe auch, das es beim serialisieren von floats auch mal dazu kommen kann, das aus einer 3,14 schonmal eine 3,1400000000012 werden kann...habe kein prob damit. Aber bei sowas geht mir echt der Hut hoch.
Setzt man auf setlocale (LC_ALL,"C") funktioniert das einwandfrei.
Kennt jemand einen guten Work-around für dieses Problem? Mir wiederstrebt es, bei jedem Session-Datenbanktzugriff die locales auf 'C' zu setzen.... für den moment funktioniert das zwar, finde ich haber höhst unsauber und dahingefrickelt....
Ich bin gerade über einen PHP-Fehler gestossen, der mich fast an den Rande des wahnsinns gebracht hat. Folgender Code funzt net (mit generierten DE-Locales!)
PHP-Code:
<?php
setlocale (LC_ALL,"de_DE");
$fl1=(float)5000000000; // 5Mrd
$str=serialize ($fl1);
$fl2=unserialize($str);
var_dump ($fl1);
var_dump ($fl2);
?>
Ich hab in der PHP-doku nachgelesen und verstehe auch, das es beim serialisieren von floats auch mal dazu kommen kann, das aus einer 3,14 schonmal eine 3,1400000000012 werden kann...habe kein prob damit. Aber bei sowas geht mir echt der Hut hoch.
Setzt man auf setlocale (LC_ALL,"C") funktioniert das einwandfrei.
Kennt jemand einen guten Work-around für dieses Problem? Mir wiederstrebt es, bei jedem Session-Datenbanktzugriff die locales auf 'C' zu setzen.... für den moment funktioniert das zwar, finde ich haber höhst unsauber und dahingefrickelt....
Kommentar