【问题标题】:PHP setlocale: configs lost after a DB connections during processPHP setlocale:在处理过程中数据库连接后配置丢失
【发布时间】:2014-04-30 19:55:01
【问题描述】:

我使用多个服务器来获取数据,但是当我连接到特定的服务器时,PHP 丢失了语言环境配置。

所以我提取数据并格式化货币数字,但是在进程的过程中,如果它连接到该服务器,那么该过程的其余部分将不再格式化货币数字...... money_format() 命令

localeconv();

之前

Array
(
    [decimal_point] => .
    [thousands_sep] => 
    [int_curr_symbol] => USD 
    [currency_symbol] => $
    [mon_decimal_point] => .
    [mon_thousands_sep] => ,
    [positive_sign] => 
    [negative_sign] => -
    [int_frac_digits] => 2
    [frac_digits] => 2
    [p_cs_precedes] => 1
    [p_sep_by_space] => 0
    [n_cs_precedes] => 1
    [n_sep_by_space] => 0
    [p_sign_posn] => 1
    [n_sign_posn] => 1
    [grouping] => Array
        (
        )

    [mon_grouping] => Array
        (
            [0] => 3
            [1] => 3
        )    
)

之后

Array
(
    [decimal_point] => .
    [thousands_sep] => 
    [int_curr_symbol] => 
    [currency_symbol] => 
    [mon_decimal_point] => 
    [mon_thousands_sep] => 
    [positive_sign] => 
    [negative_sign] => 
    [int_frac_digits] => 127
    [frac_digits] => 127
    [p_cs_precedes] => 127
    [p_sep_by_space] => 127
    [n_cs_precedes] => 127
    [n_sep_by_space] => 127
    [p_sign_posn] => 127
    [n_sign_posn] => 127
    [grouping] => Array
        (
        )

    [mon_grouping] => Array
        (
        )
)

这是我运行的脚本:

<?PHP
//set locale information
setlocale( LC_MONETARY,'en_US' );

//print location information
print_r(localeconv());

//    Array
//    (
//      [decimal_point] => .
//      [thousands_sep] => 
//      [int_curr_symbol] => USD 
//      [currency_symbol] => $
//      [mon_decimal_point] => .
//      [mon_thousands_sep] => ,
//      ...
//    )

//************************************************
//create conenction to server
$connection= new PDO("odbc:server", 'username', 'password');
//************************************************

//see locale information after creating a connection
print_r(localeconv());

//    Array
//    (
//      [decimal_point] => .
//      [thousands_sep] => 
//      [int_curr_symbol] => 
//      [currency_symbol] => 
//      [mon_decimal_point] => 
//      [mon_thousands_sep] => 
//      ...
//
//    )
?>

怎么会这样???? 谢谢

【问题讨论】:

  • 我看到我已经在 2 年前发布了这个类似的问题,但是我们现在有几个月的新服务器,但仍然遇到这个问题。 stackoverflow.com/questions/12921059/…
  • 我做了一些测试,如果我在浏览器中运行脚本,它会丢失配置,但如果我在 linux 命令行中运行它,它会保留配置,
  • 我们在 LAMP 环境中

标签: php setlocale money-format localeconv


【解决方案1】:

localeconv() 根据 setlocale() 设置的当前语言环境返回数据。

根据 PHP 文档:

“语言环境信息是按进程维护的,而不是按线程维护的。如果您在 Windows 上的 IIS、HHVM 或 Apache 等多线程服务器 API 上运行 PHP,那么在脚本运行时您可能会遇到语言环境设置的突然变化,但是脚本本身从未调用 setlocale()。这是因为其他脚本同时在同一进程的不同线程中运行,使用 setlocale() 更改了进程范围的语言环境。"

参考: https://www.php.net/manual/en/function.setlocale.php

也许您应该考虑自己定义设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多