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
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=
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
#!/usr/bin/php
<?php
setlocale(LC_ALL, 'fr_FR@euro');
print_r(localeconv());
?>
et

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());
?>
me renvoie la même chose !!!

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
        )
 
)
Avec le séparateur de décimal en "," alors que je veux le "."

Quelqu'un a une explication !!!!??????????

Merci, Théolude