Problème de locales - Codes et scripts - Linux et OS Alternatifs
MarshPosté le 17-07-2009 à 17:22:45
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.
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.
Code :
root# locale
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 "."
Marsh Posté le 17-07-2009 à 17:22:45
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
Pour tester mes locales j'ai écrit un petit script
et
me renvoie la même chose !!!
Avec le séparateur de décimal en "," alors que je veux le "."
Quelqu'un a une explication !!!!??????????
Merci, Théolude