CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
21.07.2010, 14:00:53
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegeben
Hallo zusammen,
nachdem wir den Server gewechselt haben tritt bei uns ein recht merkwürdiges Problem auf.
In einer MySQL-Tabelle stehen einige float-Werte, die dort auch wie gewohnt einen Punkt als Trennzeichen enthalten.
Fragen wir jetzt (mit oder ohne PDO) Werte aus dieser Tabelle ab, so werden sie mit einem Komma statt mit einem Punkt versehen ausgeliefert. Also beispielsweise 0,3 statt 0.3.
PHP rechnet allerdings bekanntlich float-Werte nur mit einem Punkt als Trennzeichen.
Eine Lösung für dieses Problem ist:
$var = (float) str_replace(',', '.', $var);
Allerdings kann es ja nicht Sinn der Sache sein, alle Werte vorher so zu verändern. Zumal dieses Problem noch nie aufgetreten ist und meine Internet-Recherchen nichts zutage gefördert haben.
Deshalb meine Frage: Hat schon einmal jemand ein vergleichbares Problem gehabt? Oder eine Idee, woran das liegen könnte?
Eine Idee war, dass es sich um PHP-Locale-Einstellungen handeln könnte. localeconv() gibt allerdings auf beiden Servern exakt das gleiche Ergebnis aus.
Danke für Eure Hilfe!
Gruß, Dennis
|
21.07.2010, 22:20:13
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Zitat:
PHP rechnet allerdings bekanntlich float-Werte nur mit einem Punkt als Trennzeichen.
|
Intern ja!
Aber bei der Ausgabe kann es durchaus mit Komma sein!
PHP-Code:
<?php
error_reporting(-1);
ini_set('display_errors', TRUE);
setlocale(LC_ALL,'de_DE@euro', 'de_DE', 'de', 'ge');
date_default_timezone_set('Europe/Berlin');
echo 3.77; // sagt bei mir: 3,77
?>
|
21.07.2010, 23:07:32
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Hallo DokuLeseHemmung,
danke für Deine Antwort.
Bei der Ausgabe ist dies auch nicht weiter schlimm - sogar gewünscht. Das Problem besteht nur darin, dass bereits die MySQL SELECT-Abfrage eine Zahl mit Komma liefert, mit der man so nicht rechnen kann.
Also würde die Abfrage
SELECT wert FROM tabelle
bereits 3,77 statt 3.77 ergeben, wie man dem var_dump() entnehmen kann.
Gruß, Dennis
|
22.07.2010, 04:34:29
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Zitat:
wie man dem var_dump() entnehmen kann.
|
Aha!
(sehe ich leider nicht)
|
22.07.2010, 10:50:22
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Sorry, dachte das wäre meinem ersten Post zu entnehmen gewesen.
Der var_dump liefert aber auf jeden Fall so etwas wie string(3) => "0,3"
Gruß, Dennis
|
22.07.2010, 11:29:10
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
lieber Der-Dennis, was soll das hier: crossposting ?
ist es denn so schwer zu verstehen, dass es antisozial ist, (ehrenamtliche) helfer in unterschiedlichen foren gleichzeitig zu beschäftigen? wenn man nach tagen keine lösung für ein problem findet, ist ein erneutes posten in einem anderen forum sicher ein legitimer schritt. aber (nahezu) gleichzeitig?
wenn du so dringend support benötigst und nicht warten kannst, solltest du nicht in den selbsthilfe-foren dieser welt nachfragen, sondern profis (gegen cash) beauftragen.
der einzige grund, den thread nicht sofort zu schliessen, ist die (aus meiner perspektive) interessante thematik...
cx
|
22.07.2010, 12:38:05
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Sorry, ich weiß, dass das blöd ist. Den Beitrag findest Du übrigens auch bei SelfHTML.org.
Ich wollte den zuerst bei SelfHTML.org einstellen, hab mich aber erst bei SelfHTML.de angemeldet und das nicht gecheckt. Erst später hab ich gemerkt, dass ich auf der falschen Seite bin...
Und anschließend hab ich mich gefragt, warum ich das dann eigentlich bei SelfHTML.org gepostet hab, wo es doch auch das spezialisiertere SelfPHP gibt und hab mich hier angemeldet.
Es wird nicht wieder vorkommen, seht es bitte als eine zugegeben blöde Ausnahme eines Neulings in diesen Foren.
Gruß, Dennis
|
22.07.2010, 12:41:24
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Zitat:
Zitat von cortex
wenn du so dringend support benötigst und nicht warten kannst, solltest du nicht in den selbsthilfe-foren dieser welt nachfragen, sondern profis (gegen cash) beauftragen.
|
Hierzu noch ganz kurz: Da sind bereits Profis (oder welche, die es zumindest sein sollten, nämlich das Rechenzentrum meiner Uni) dran, die aber zur Zeit auch keinen wirklichen Rat haben. Deshalb vertraue ich auf die Netzgemeinde :-)
Gruß, Dennis
|
22.07.2010, 18:22:40
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Wir haben das Problem soweit behoben.
In dem Projekt wurde in einer Datei
PHP-Code:
<?php
setlocale(LC_ALL, array('de_DE.UTF-8', 'deu_deu.65001'));
aufgerufen, was anscheinend das Problem auslöst. Eine Änderung auf
PHP-Code:
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
brachte keinen Erfolg, dafür aber die Änderung auf
PHP-Code:
<?php
setlocale(LC_ALL, 'en_US.8859-1');
Warum auch immer das der Fall ist.
Insgesamt ist es nun so, dass der Großteil der Server die setlocale()-Deklaration einfach ignoriert, was bei unseren vorherigen Servern wohl auch der Fall war. Höchstwahrscheinlich sind bestimmte Server- oder php.ini-Einstellungen dafür verantwortlich, die wir aber noch nicht näher bestimmen konnten. Hat jemand eine Idee hierzu?
Deshalb konnten wir das Problem auch so schlecht finden. Wie gesagt, vorher lief alles super, erst beim Umzug fiel das Problem auf. Denn eigentlich übernimmt unsere View die Aufgabe, die Ausgabe bezüglich der länderspezifischen Einstellungen zu ändern. Hier stand also im "Modus deutsch" immer ein Komma statt einem Punkt, obwohl PHP mit englischen Fließkommazahlen gerechnet hatte.
Eine große Frage bleibt jedoch noch im Raum: Warum sind die Locale-Einstellungen augenscheinlich das Problem, dass PHP mit diesen Werten nicht mehr rechnen kann? Warum werden diese bereits beim Auslesen aus der Datenbank genutzt und nicht erst, wenn Werte ausgegeben werden? Denn sollte sich dies bestätigen, wären sie doch vollkommener Unsinn. Warum sollte ich die Einstellungen benutzen, wenn ich die Werte zwischendurch wieder in das englische System übertragen muss, um sie anschließend wieder für die Ausgabe zu ändern!?
Wenn noch jemand Ideen hierzu hat, würde ich mich sehr freuen, von Euch zu hören.
Gruß, Dennis
|
22.07.2010, 18:52:01
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: PHP / PDO / MySQL: Beim Datentyp float wird ein Komma statt einem Punkt ausgegebe
Zitat:
Zitat von Der-Dennis
Insgesamt ist es nun so, dass der Großteil der Server die setlocale()-Deklaration einfach ignoriert, was bei unseren vorherigen Servern wohl auch der Fall war. [...] Hat jemand eine Idee hierzu?
|
ich persönlich habe mit setlocale nach zahlreichen tests in der vergangenheit vorerst abgeschlossen. im entsprechenden kapitel des handbuchs ist darüber hinaus vermerkt:
Zitat:
Die Locale-Informationen wirken auf den Prozess, nicht auf den Thread. Sofern Sie PHP mit einer Multithreaded Server API wie IIS oder Apache unter Windows einsetzen, rechnen Sie mit unerwarteten Änderungen der Locale-Einstellungen zur Laufzeit des Skripts, auch wenn das Skript selbst keinen setlocale()-Aufruf durchführt. Dies passiert, da andere Skripte in verschiedenen Threads des selben Prozesses zur selben Zeit prozessweit die Locale-Einstellungen mittels setlocale() ändern.
|
imho ein krasses ding.
Zitat:
Zitat von Der-Dennis
Eine große Frage bleibt jedoch noch im Raum [...]
|
setlocale ist ein systemisches setting:
Zitat:
Eine Locale ist ein Einstellungssatz, der die Gebietsschemaparameter für Computerprogramme enthält. Dazu gehören in erster Linie die Sprache der Benutzeroberfläche, das Land und Einstellungen zum Zeichensatz, Tastaturlayout, Zahlen-, Währungs-, Datums- und Zeitformaten.
|
quelle: locale in der wikipedia.
cx
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:54:34 Uhr.
|