php 7.1 / 7.0 проблема с часовым поясом по умолчанию

Я немного запутался при исследовании определения часового пояса по умолчанию в php 7.1 / 7.0:
У нас есть простой PHP-код CLI:

 php -r "var_dump(ini_get('date.timezone'),date_default_timezone_get());"

и согласно документации php.net (http://php.net/manual/en/function.date-default-timezone-get.php) у нас должно быть ‘UTC’ в результате функции date_default_timezone_get, потому что мы не устанавливаем часовой пояс в php.ini.
И вот вывод этого кода:

Command line code:1:
string(0) ""Command line code:1:
string(16) "America/Anguilla"

здесь мы можем видеть, что ini_get (‘date.timezone’) равен пустой строке, но
date_default_timezone_get равно Америка / Ангилья

я использую: PHP 7.1.12-3+ubuntu14.04.1+deb.sury.org+1 (cli) (built: Dec 14 2017 15:58:40) ( NTS ),

php -i показывает нам:

Дата

date/time support => enabled
timelib version => 2016.05
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Anguilla

Кстати, часовой пояс на этом сервере: Asia/Qatar (AST, +0300), но, как я знаю, это не должно быть взято php из php 5.4.

Не могли бы вы помочь мне узнать, где было установлено это значение для этого часового пояса?

ОБНОВЛЕНО:
Это исходный код php 7.1 функции обнаружения часового пояса:

       static char* guess_timezone(const timelib_tzdb *tzdb)
{
/* Checking configure timezone */
if (DATEG(timezone) && (strlen(DATEG(timezone))) > 0) {
return DATEG(timezone);
}
/* Check config setting for default timezone */
if (!DATEG(default_timezone)) {
/* Special case: ext/date wasn't initialized yet */
zval *ztz;

if (NULL != (ztz = cfg_get_entry("date.timezone",

sizeof("date.timezone")))
&& Z_TYPE_P(ztz) == IS_STRING && Z_STRLEN_P(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL_P(ztz), tzdb)) {
return Z_STRVAL_P(ztz);
}
} else if (*DATEG(default_timezone)) {
if (DATEG(timezone_valid) == 1) {
return DATEG(default_timezone);
}

if (!timelib_timezone_id_is_valid(DATEG(default_timezone), tzdb)) {
php_error_docref(NULL, E_WARNING, "Invalid date.timezone value '%s', we selected the timezone 'UTC' for now.", DATEG(default_timezone));
return "UTC";
}

DATEG(timezone_valid) = 1;
return DATEG(default_timezone);
}
/* Fallback to UTC */
return "UTC";
}

В php 5.6 и ниже я вижу, что php генерирует предупреждение в случае, если часовой пояс не установлен:

 /* Fallback to UTC */
php_error_docref(NULL TSRMLS_CC, E_WARNING, DATE_TZ_ERRMSG "We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.");
return "UTC";

Заранее спасибо,

С уважением,

Дмитрий

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector