Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 24-03-2005, 13:06
Monarch
 Newbie
Links : Onlinestatus : Monarch ist offline
Registriert seit: Mar 2005
Beiträge: 4
Monarch ist zur Zeit noch ein unbeschriebenes Blatt
Monarch eine Nachricht über ICQ schicken
Standard serialize/unserialize und locales

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!)

PHP-Code:
<?php

setlocale 
(LC_ALL,"de_DE");

$fl1=(float)5000000000// 5Mrd
$str=serialize ($fl1);
$fl2=unserialize($str);

var_dump ($fl1);
var_dump ($fl2);

?>
, 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....
Mit Zitat antworten