Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php设置时区相同时间的不同结果_Php - Fatal编程技术网

php设置时区相同时间的不同结果

php设置时区相同时间的不同结果,php,Php,我在两台不同的机器上同时得到不同的时区偏移。我找不到根本原因 测试代码: # create empty directory and file, so php has no configuration mkdir /tmp/empty; touch /tmp/emptycfg PHP_INI_SCAN_DIR=/tmp/empty /usr/bin/php5 -c /tmp/emptycfg -r '$curTime = new \DateTime("2015-11-06 12:59:59", n

我在两台不同的机器上同时得到不同的时区偏移。我找不到根本原因

测试代码:

# create empty directory and file, so php has no configuration
mkdir /tmp/empty; touch /tmp/emptycfg
PHP_INI_SCAN_DIR=/tmp/empty /usr/bin/php5 -c /tmp/emptycfg -r '$curTime = new \DateTime("2015-11-06 12:59:59", new \DateTimeZone("UTC")); var_dump($curTime); $curTime->setTimezone(new \DateTimeZone("Europe/Istanbul")); var_dump($curTime);'
我在一台机器上得到的结果是:

object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-11-06 12:59:59.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(3) "UTC"
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-11-06 15:59:59.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "Europe/Istanbul"
}
但另一方面:

object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-11-06 12:59:59.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(3) "UTC"
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-11-06 14:59:59.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "Europe/Istanbul"
}
伊斯坦布尔在11月6日比UTC早3个小时(11月8日和3月29日日光变化)。 我尝试过的事情:

  • 更改系统时间(一年中的不同月份)
  • php-i、env变量的差异(除了SSH\u客户端、SSH\u TTY、SSH\u AUTH\u SOCK、SSH\u连接环境变量之外,没有其他更改)
其他信息(在两台机器上都是相同的php二进制文件(相同的md5sum))


我认为,在夏时制问题上,1个小时的差异表现出来了。 -检查两台计算机上的系统时区和夏令时设置
-在两台计算机上检查php.ini中的时区和夏时制

我发现php依赖于tzdata包,它收到了一个更新(changelog)


因此,在执行apt get install tzdata之后,两台机器都提供了相同的结果。

那么,系统配置真的不应该影响这样的功能的结果。如果您仔细查看我的测试命令,我会将空配置导入到php命令中,并用“php-I”确认。我怀疑这个错误在日期时区部分。我尝试了伊斯坦布尔时区的不同日期,似乎变化与11月8日不同。在第二台计算机上,更改正好在该日期(这是预期的)。我将查看php源代码。谢谢你的回答。
$ PHP_INI_SCAN_DIR=/tmp/empty /usr/bin/php5 -c /tmp/emptycfg -i | head -n 30
phpinfo()
PHP Version => 5.6.16-1+deb.sury.org~precise+1

System => Linux dev 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /tmp/emptycfg
Scan this dir for additional .ini files => /tmp/empty
Additional .ini files parsed => (none)
PHP API => 20131106
PHP Extension => 20131226
Zend Extension => 220131226
Zend Extension Build => API220131226,NTS
PHP Extension Build => API20131226,NTS
Debug Build => no
Thread Safety => disabled
Zend Signal Handling => disabled
Zend Memory Manager => enabled
Zend Multibyte Support => provided by mbstring
IPv6 Support => enabled
DTrace Support => enabled

Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters => zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies