Apache / PHP / php-fpm:语言环境设置自行更改

时间:2015-06-01 09:52:35

标签: php apache

我遇到了Apache和php-fpm的错误:语言环境设置随机改变。

以下是正确的区域设置:

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
        (
        )

)

以下是更改的设置:

Array
(
    [decimal_point] => ,
    [thousands_sep] =>  
    [int_curr_symbol] => EUR 
    [currency_symbol] => €
    [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
        )

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

)

问题是随机发生的,我认为这是由于流程,就像在PHP doc上说的那样:

  

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

删除php-fpm并使用FastCGI时,问题不再发生。我怎样才能使用php-fpm?问题出现在共享主机上(我们是提供托管的公司),我们确实需要php-fpm才能使用池。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我不确定apache,但是Nginx有一个配置变量来设置工作线程。配置apache一次运行一个线程可能会解决您的问题,但当然可能不希望性能明智。