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:
.....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $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 : Sélectionner tout - Visualiser dans une fenêtre à part root# locale
Pour tester mes locales j'ai écrit un petit script
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 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=
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #!/usr/bin/php <?php setlocale(LC_ALL, 'fr_FR@euro'); print_r(localeconv()); ?>
me renvoie la même chose !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #!/usr/bin/php <?php setlocale(LC_ALL, 'en_US ISO-8859-1'); print_r(localeconv()); ?>
Avec le séparateur de décimal en "," alors que je veux le "."
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 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 ) )
Quelqu'un a une explication !!!!??????????
Merci, Théolude
Partager