J'ai un problème étrange en PHP.
Avant ma migration de serveur, j'intégrais des fichiers textes en provenance d'un AS400 pour synchroniser la BDD d'un ERP.
$flo_prix = intval(trim(substr($str_line, 61, 17))) / 100000;
Ensuite je construisaise une requête avec cette valeur:
$str_query = 'REPLACE INTO prix SET tarif = "'.$str_code_tarif.'" ';
$str_query .= ', article = "'.$str_code_article.'"';
$str_query .= ', articlePere = "'.$str_code_pere.'"';
$str_query .= ', prix = '.$flo_prix.' ';
.....
$flo_prix s'écrivait dans ma chaine avec un point pour le séparateur de décimal. Sur le nouveau serveur (Debian 5.0 / Apache 2 / PHP5) quasi identique à l'original (version PHP et Debian différente) la chaine s'écrit avec une virgule et provoque une erreur SQL.
Ce script est exécuté avec un cron en mode CLI.
me renvoie
Code :
- LANG=fr_FR
- LC_CTYPE="fr_FR"
- LC_NUMERIC="fr_FR"
- LC_TIME="fr_FR"
- LC_COLLATE="fr_FR"
- LC_MONETARY="fr_FR"
- LC_MESSAGES="fr_FR"
- LC_PAPER="fr_FR"
- LC_NAME="fr_FR"
- LC_ADDRESS="fr_FR"
- LC_TELEPHONE="fr_FR"
- LC_MEASUREMENT="fr_FR"
- LC_IDENTIFICATION="fr_FR"
- LC_ALL=
|
Pour tester mes locales j'ai écrit un petit script
Code :
- #!/usr/bin/php
- <?php
- setlocale(LC_ALL, 'fr_FR@euro');
- print_r(localeconv());
- ?>
|
et
Code :
- #!/usr/bin/php
- <?php
- setlocale(LC_ALL, 'en_US ISO-8859-1');
- print_r(localeconv());
- ?>
|
me renvoie la même chose !!!
Code :
- Array
- (
- [decimal_point] => ,
- [thousands_sep] =>
- [int_curr_symbol] => EUR
- [currency_symbol] => EUR
- [mon_decimal_point] => ,
- [mon_thousands_sep] =>
- [positive_sign] =>
- [negative_sign] => -
- [int_frac_digits] => 2
- [frac_digits] => 2
- [p_cs_precedes] => 0
- [p_sep_by_space] => 1
- [n_cs_precedes] => 0
- [n_sep_by_space] => 1
- [p_sign_posn] => 1
- [n_sign_posn] => 1
- [grouping] => Array
- (
- [0] => 3
- [1] => 3
- )
- [mon_grouping] => Array
- (
- [0] => 3
- [1] => 3
- )
- )
|
Avec le séparateur de décimal en "," alors que je veux le "."
Quelqu'un a une explication !!!!??????????
Merci, Théolude