PHP问题 - 设置时区时出现安全模式错误

时间:2010-09-16 02:05:23

标签: php timezone

我正在尝试在我的服务器上安装PHP application。但是我收到了这个错误:

  

警告:putenv()[function.putenv]:   安全模式警告:无法设置   环境变量'PHP_TZ' - 它是   不在允许列表中   第14行的/ public / timezone.inc

我找到了有问题的文件和代码部分(如下)。我该如何修复此代码?什么是PHP_TZ应该做的?为什么PHP不喜欢它?我该怎么做?

//set the timezone
if ($configdata["timezone"] != "") {
    putenv("PHP_TZ=" . stripslashes($configdata["timezone"]));
    putenv("TZ=" . stripslashes($configdata["timezone"]));

    //for >= PHP 5.1
    if(function_exists("date_default_timezone_set")) {
        date_default_timezone_set($configdata["timezone"]);
    }

我使用的是PHP 5.2.10。我尝试了'Europe / Zurich'和'UTC'作为$ configdata [“timezone”]的值,并且两者都有相同的错误。

2 个答案:

答案 0 :(得分:2)

PHP_TZ代表PHP时区。

从5.1版开始,您需要通过date_default_timezone_set函数或PHP配置进行设置。来自文档:

  

注意:

     

自PHP 5.1.0起(当日期/时间函数被重写时),如果时区无效,则每次调用日期/时间函数都将生成E_NOTICE,如果使用和/或E_WARNING消息系统设置或TZ环境变量。

您可以做的最简单的解决方法如下。

//set the timezone
if ($configdata["timezone"] != "") {
    //for >= PHP 5.1
    if(function_exists("date_default_timezone_set")) {
        date_default_timezone_set($configdata["timezone"]);
    // for PHP < 5.1
    } else {
        putenv("PHP_TZ=" . stripslashes($configdata["timezone"]));
        putenv("TZ=" . stripslashes($configdata["timezone"]));
    }
}

答案 1 :(得分:1)

默认情况下,你应该能够设置它。见下面的粗体部分。您的托管服务提供商似乎已通过safe_mode_protected_env_vars将其停用。

bool putenv ( string $setting )

  

将设置添加到服务器   环境。环境变量   只会持续一段时间   当前的要求。在结束时   请求恢复环境   它的原始状态。

     

设置某些环境变量   可能是潜在的安全漏洞。   safe_mode_allowed_env_vars   指令包含逗号分隔   前缀列表。在安全模式下,   用户只能改变环境   名称以。开头的变量   该指令提供的前缀。   默认情况下,用户只能使用   设置开始的环境变量   使用PHP_(例如PHP_FOO = BAR)。注意:如果   这个指令是空的,PHP会让   用户修改任何环境   可变!

     

safe_mode_protected_env_vars   指令包含逗号分隔   环境变量列表,即   最终用户将无法更改   使用putenv()。这些变量会   即使受到保护   safe_mode_allowed_env_vars设置为   允许改变它们。

HoLyVieR的解决方案听起来不错。