Fre*_*edy 1 php centos strtotime opensuse
我有两个不同操作系统的Web服务器.
SERVER 1在带有LAMP Server的Centos 5中运行.PHP版本5.3.21
SERVER 2在带有LAMP Server的openSUSE 11.3中运行.PHP版本5.3.5
两种PHP配置都是一样的.有些是默认值.
我有一个php文件,代码如下:
<?php
/* TEST STRTOTIME */
echo "<br /><br />".strtotime("2038-01-01");
echo "<br /><br />".strtotime("2039-01-01");
?>
Run Code Online (Sandbox Code Playgroud)
当我在SERVER 1中运行此文件时,结果是:
2145934800
2177470800
但是当我在SERVER 2中运行此文件时,第二次转换不会产生任何结果.只显示结果是:
2145891600
为什么两台服务器上的转换结果会给出不同的值?而同一个文件.为什么SERVER 2无法在上述日期转换2038-01-01?有这个问题的解决方案吗?
您的远程服务器可能是32位.在大约 2038年之后,您将需要一台64位服务器来处理日期.
原因是您的远程服务器将其整数存储为带符号的32位整数.可以存储为带符号的32位整数的最大数量是2,147,483,647(2^31 - 1).由于此数字是1970年1月1日(Unix纪元)之后的秒数,您可以看到该数字最终将耗尽(如果未检查边界,则可能会溢出).

图片来源:维基百科