我正在尝试在我的服务器上安装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”]的值,并且两者都有相同的错误。
答案 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的解决方案听起来不错。